LINUX VHD UBUNTU ARCH Fedora Opensuse Mageia
发表于 : 2016-10-26 17:59
I think, that you are mistaken. I can prove it. Write to me in PM, we will talk.
致力于Ubuntu中文推广
http://forum.ubuntu.com.cn/
UBT-small.iso文件系统与vhd squashfs系统一致,都是ubuntu-1604,更新到最新(4.4.0-59)。
用户名 密码 root密码都是ubuntu。 有如下用法:
1. 可以直接从VirtualBox启动,并且可以EFI启动和传统bios-mbr启动。
2. 可以和发行版live-cd一样通过grub4dos,grub2启动
(需要把casper/initrd.img casper/vmlinuz先提取出来 )。
3. 可以把ISO文件放到/grub/IMGS目录下,利用网友制作的自动ISO菜单直接启动
(只限于grub4dos启动)。
4. 启动后可以使用主目录的UCloner中的UCloner_CN或UCloner_EN(双击),
依照提示操作,将/cdrom/casper/中的文件UBT-small.squashfs 恢复到硬盘分区。
5. 也可以预先在WINDOWS系统下准备好一个固定大小的vhd虚拟磁盘,
例如名字为UBT-small.vhd,
进行初始化和建立一个分区,格式化并将其标记为活动分区。
(右键我的电脑--管理--创建vhd--初始化--建立简单卷--标记为活动分区)
再启动到UBT-small的ISO系统(或live系统)中,打开一个终端,进入到vhd文件所在目录,
运行
sudo kpartx -av UBT-small.vhd
记住其显示的输出,里面有类似于 /dev/mapper/loop2p1 型字段。
图形界面打开主目录的UCloner子目录,双击UCloner_CN(UCloner_EN),
依提示操作,将/cdrom/casper/中文件UBT-small.squashfs恢复到某个固定大小VHD硬盘的分区,
此时弹出对话框中 / 分区手动填写,如 /dev/mapper/loop2p1(与kpartx命令的输出一致) .
文件系统手动填写ext4 ,其他空白。然后一直下一步或输入y回车让其恢复系统。
注意,grub2应该空白,等待系统恢复完毕以后再手动安装。
安装grub2的参考命令:
sudo mount /dev/mapper/loop2p1 /mnt
sudo grub-install --root-directory=/mnt /dev/loop2
代码: 全选
menuentry " UBT-small.vhd " --class ubuntu {
insmod gzio
insmod part_msdos
insmod part_gpt
insmod ext2
insmod ntfs
insmod probe
set vhdfile="/ubt/UBT-small.vhd"
set root=(hd0,1)
search --no-floppy -f --set=aabbcc $vhdfile
set root=${aabbcc}
probe -u --set=ddeeff ${aabbcc}
loopback loop0 $vhdfile
linux (loop0,1)/vmlinuz root=UUID=${ddeeff} rw kloop=$vhdfile kroot=/dev/mapper/loop0p1
initrd (loop0,1)/initrd.img
}
本版加入了一种新的引导模式,用来引导squashfs只读文件系统。(使用了overlay机制)
方法与KLOOP的方法一样,还是分为两步。
第一步,编译安装修改过的ntfs-3g。
(不修改则无法防止关机时候在卸载根设备前先卸载根设备文件所在的底层分区)。
第二步,制作内存镜像盘initrd 或initramfs。做法与KLOOP一样。
制作好后将其改名(例如initrd-fedora),与vmlinuz-XXXX(改名为vmlinuz-feodra)与squashfs文件
(例如 Fedora25.squashfs)放在同一个目录(例如casper1)下。
引导菜单,引导时候只需要root 与squashfs两个参数,root的值是squashfs文件所在分区,
squashfs的值是squashfs文件的带路径的名字。例子:
grub4dos菜单:
title 启动LIVE-Fedora
find --set-root --ignore-floppies --ignore-cd /casper1/vmlinuz-fedora
uuid ()
kernel /casper1/vmlinuz-fedora root=UUID=%?% squashfs=/casper1/Fedora25.squashfs
initrd /casper1/initrd-fedora
grub2菜单:
menuentry "live-Fedora " --class fedora {
insmod gzio
insmod part_msdos
insmod part_gpt
insmod ext2
insmod ntfs
insmod probe
set sfsfile="/casper1/Fedora25.squashfs"
set root=(hd0,1)
search --no-floppy -f --set=aabbcc $sfsfile
set root=${aabbcc}
probe -u --set=ddeeff ${aabbcc}
linux /casper1/vmlinuz-fedora root=UUID=${ddeeff} squashfs=$sfsfile rw nompath nodmraid
initrd /casper1/initrd-fedora
附录===备份现有linux系统为squashfs系统的命令与恢复命令
需要linux系统安装好squashfs-tool,以及rsync。以Fedora25为例子。假设根设备为/dev/sda12。备份feodra25到/dev/sda9的目录casper1下,备份名字为Fedora25.squashfs。
su
cd /tmp
mkdir mm tt
mount /dev/sda12 mm
mount /dev/sda9 tt
mksquashfs mm tt/casper1/Fedora25.squashfs -b 262144 -comp xz -e tmp/mm tmp/tt
恢复命令
假设启动到了squashfs系统中后,要把Fedora25.squashfs恢复到硬盘/dev/sda12中,可以如下操作:
su
cd /tmp
mkdir mm tt
mount /host/casper1/Fedora25.squashfs mm
mount /dev/sda12 tt
rsync -SHav mm/* tt/
等恢复完毕后再通过修改grub4dos的menu.lst或grub2的菜单来设置引导即可。
代码: 全选
本版加入了一种新的引导模式,用来引导安装在一个目录以内的文件系统。(使用了overlay机制)
方法只有一步,就是制作能引导目录内linux系统的内存镜像盘initrd 或initramfs。
具体做法看各个子目录内的详细说明(就是KLOOP方法的第二步)。
引导菜单,引导时候需要root 与upperdir,workdir三个个参数,root的值是目录文件系统所在分区,
upperdir的值是文件系统所在目录的带路径的名字。workdir应该是与upperdir在同一分区,同一层次的
另一个子目录(新建一个空目录或者使用现成的空目录即可)。(lowerdir是内存中的一个目录,不用处理)
例如,我在一个ext4分区内安装了一个linux系统,又在这个分区根目录下建立了两个目录,名字为UBT-small ,host。然后把一个安装好的UBUNTU系统复制到UBT-small目录内,host目录保持为空目录。引导菜单如下:
grub4dos菜单:
title 启动upperdir-UBUNTU
find --set-root --ignore-floppies --ignore-cd /UBT-small/vmlinuz
uuid ()
kernel /UBT-small/vmlinuz root=UUID=%?% upperdir=/UBT-small workdir=/host apparmor=0
initrd /UBT-small/initrd.img
grub2菜单:
menuentry "upperdir-UBUNTU " --class ubuntu {
insmod gzio
insmod part_msdos
insmod part_gpt
insmod ext2
insmod ntfs
insmod probe
set root=(hd0,1)
search --no-floppy -f --set=aabbcc /UBT-small/vmlinuz
set root=${aabbcc}
probe -u --set=ddeeff ${aabbcc}
linux /UBT-small/vmlinuz root=UUID=${ddeeff} upperdir=/UBT-small workdir=/host apparmor=0
initrd /UBT-small/initrd.img
}
注释1:对于目录内的ubuntu系统,需要注意两点,第一,引导时候加入参数apparmor=0,这样网络
可以自动检测好链接好。第二,在更新内核时候会遇到grub错误,解决方法是彻底卸载grub包。只使用
其他系统的grub2或者grub4dos引导。对于其他linux版本,应该不需要这两点。
注释2:可以使用rsync命令把一个安装好的ubuntu系统同步复制到子目录UBT-samll下,复制完成
后应该修改/etc/fstab文件,注释掉root挂载那一行。
代码: 全选
title UBUNTU1804-squashfs
find --set-root --ignore-floppies --ignore-cd /ubuntu/UBUNTU1804.squashfs
uuid ()
kernel /ubuntu/vmlinuz1804 root=UUID=%?% squashfs=/ubuntu/UBUNTU1804.squashfs apparmor=0
initrd /ubuntu/initrd.img1804
代码: 全选
menuentry "UBUNTU1804-squashfs " --class ubuntu {
insmod gzio
insmod part_msdos
insmod part_gpt
insmod ext2
insmod ntfs
insmod probe
set sfsfile="/ubuntu/UBUNTU1804.squashfs"
set root=(hd0,1)
search --no-floppy -f --set=aabbcc $sfsfile
set root=${aabbcc}
probe -u --set=ddeeff ${aabbcc}
linux /ubuntu/vmlinuz1804 root=UUID=${ddeeff} squashfs=$sfsfile rw apparmor=0
initrd /ubuntu/initrd.img1804
代码: 全选
sudo dd if=/dev/zero of=/media/ubuntu/UBT/ubuntu/ubt.vhd bs=1G count=16
sudo kpartx -av /media/ubuntu/UBT/ubuntu/ubt.vhd
sudo mkfs.ext4 /media/ubuntu/UBT/ubuntu/ubt.vhd
sudo mkdir /tmp/mm /tmp/tt
sudo mount --bind / /tmp/mm
sudo mount /media/ubuntu/UBT/ubuntu/ubt.vhd /tmp/tt
sudo rsync -SHav /tmp/mm/* /tmp/tt/
代码: 全选
enuentry "ubt-VHD" --class ubuntu {
insmod gzio
insmod part_msdos
insmod part_gpt
insmod ext2
insmod ntfs
insmod probe
set vhdfile="/ubuntu/ubt.vhd"
set root=(hd0,1)
search --no-floppy -f --set=aabbcc $vhdfile
set root=${aabbcc}
probe -u --set=ddeeff ${aabbcc}
loopback lo $vhdfile
linux (lo)/boot/vmlinuz root=UUID=${ddeeff} kloop=$vhdfile rw kroot=/dev/loop0 audit=0 apparmor=0
initrd (lo)/boot/initrd.img
}
代码: 全选
title 启动ubt.img
find --set-root --ignore-floppies --ignore-cd /ubuntu/ubt.img
uuid ()
kernel /ubuntu/vmlinuz root=UUID=%?% kloop=/ubuntu/ubt.img kroot=/dev/loop0
initrd /ubuntu/initrd.img
代码: 全选
linux /vmlinuz root=LABEL=XXXX kloop=/Fedora.vhd kroot=/dev/mapper/loop0p1 selinux=0
OKsxgpic 写了: ↑2022-08-20 5:30 以下这个项目使用并改进了你的代码(可以不依赖 ntfs-3g,可以在 exfat 分区启动),以及lub的部分代码:
https://github.com/blickers/livebackup