行文粗糙,有不妥之处假期再改吧,最关键的精华就是 sudo btrfs subvolume snapshot / @deepin
命令的使用,这条命令可以直接把/分区快照到@deepin子卷里。
难道 / 严格来说,也是子卷,所以也可以快照 ?不得不说,btrfs 666
难道 / 严格来说,也是子卷,所以也可以快照 ?不得不说,btrfs 666
大概可以这么理解。
学习,收藏
你或许需要这个
https://bbs.deepin.org/post/269851
你或许需要这个
https://bbs.deepin.org/post/269851
谢谢,你写得比我详细。上一天班太累了,写的比较马虎,也不知道大家能不能看的明白。
那我也分享一下自己乱总结的安装要点
不错,终于把 boot
分区干掉了
不过,在修改 efi
分区里面的配置重启后,grub
还是 boot
分区的
最后运行 sudo dpkg-reconfigure grub-efi-amd64
修改的 efi
才生效!
不错,终于把 boot
分区干掉了
不过,在修改 efi
分区里面的配置重启后,grub
还是 boot
分区的
最后运行 sudo dpkg-reconfigure grub-efi-amd64
修改的 efi
才生效!
看着boot分区碍眼。
不错,终于把 boot
分区干掉了
不过,在修改 efi
分区里面的配置重启后,grub
还是 boot
分区的
最后运行 sudo dpkg-reconfigure grub-efi-amd64
修改的 efi
才生效!
efi 分区有两个或者更多的目录,比如boot、deepin之类,每个都要修改。
我也来分享下我的操作。
操作前的基础环境是:一共分了efi、/、数据盘这3个分区,boot在根分区里,只根分区使用btrfs。
操作之后,根目录改到/@下。
0、操作前的分区情况
UUID=b5c645b1-4b98-4d61-a643-ffd164cb6789 / btrfs rw,relatime,ssd,space_cache,subvolid=5,subvol=/ 0 0
UUID=7A1A-9AED /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2
UUID="96df16da-7fe6-41c9-8c66-b9dfd5c20d72" /data ext4 rw,relatime 0 2
/data/home /home none defaults,bind 0 0
/data/opt /opt none defaults,bind 0 0
/data/var /var none defaults,bind 0 0
/data/root /root none defaults,bind 0 0
tmpfs /tmp tmpfs defaults,noatime,mode=1777,size=6g 0 0
1、创建快照并修改相关配置文件
#1、创建根分区快照
sudo btrfs subvolume snapshot / /@
#2、备份所需修改的文件或目录
sudo cp -a /boot/efi/EFI /boot/efi/EFI_bak
sudo cp /@/etc/fstab /@/etc/fstab_bak
sudo cp /@/boot/grub/grub.cfg /@/boot/grub/grub.cfg_bak
#3、修改efi中的grub.cfg
sudo find /boot/efi/EFI -name grub.cfg | sudo xargs sed -i 's/\/boot/\/@\/boot/'
#4、修改快照中的fstab
sudo sed -i 's/subvol=\//subvol=@/' /@/etc/fstab
#5、修改快照中的grub.cfg
sudo sed -ri 's/root=UUID.*$/\0 rootflags=subvol=@/' /@/boot/grub/grub.cfg
2、重启系统
3、再次更新grub.cfg配置
#1、给grub配置项添加rootflags
echo 'GRUB_CMDLINE_LINUX_DEFAULT="rootflags=subvol=@ $GRUB_CMDLINE_LINUX_DEFAULT"' > 99_rootflags_subvol.conf
sudo mv 99_rootflags_subvol.conf /etc/default/grub.d/99_rootflags_subvol.conf
#2、重新生成grub.cfg
sudo update-grub
4、清理原根目录下的文件
#1、挂载根分区
sudo mount `df | grep -w / | awk '{print $1}'` /mnt
#2、清理根分区文件,要保留@目录。为了数据安全,建议手工一项一项来删除
cd /mnt
#以下命令仅做记录,建议手工一项一项删
#sudo rm -r !(@)
#sudo rm -r .*
#3、删除完成后再次确认,是否只留下了@目录
sudo ls -al /mnt
#4、卸载/mnt挂载点,并确认是否卸载成功
cd;sudo umount /mnt;df | grep mnt
我也来分享下我的操作。
操作前的基础环境是:一共分了efi、/、数据盘这3个分区,boot在根分区里,只根分区使用btrfs。
操作之后,根目录改到/@下。
0、操作前的分区情况
UUID=b5c645b1-4b98-4d61-a643-ffd164cb6789 / btrfs rw,relatime,ssd,space_cache,subvolid=5,subvol=/ 0 0
UUID=7A1A-9AED /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2
UUID="96df16da-7fe6-41c9-8c66-b9dfd5c20d72" /data ext4 rw,relatime 0 2
/data/home /home none defaults,bind 0 0
/data/opt /opt none defaults,bind 0 0
/data/var /var none defaults,bind 0 0
/data/root /root none defaults,bind 0 0
tmpfs /tmp tmpfs defaults,noatime,mode=1777,size=6g 0 0
1、创建快照并修改相关配置文件
#1、创建根分区快照
sudo btrfs subvolume snapshot / /@
#2、备份所需修改的文件或目录
sudo cp -a /boot/efi/EFI /boot/efi/EFI_bak
sudo cp /@/etc/fstab /@/etc/fstab_bak
sudo cp /@/boot/grub/grub.cfg /@/boot/grub/grub.cfg_bak
#3、修改efi中的grub.cfg
sudo find /boot/efi/EFI -name grub.cfg | sudo xargs sed -i 's/\/boot/\/@\/boot/'
#4、修改快照中的fstab
sudo sed -i 's/subvol=\//subvol=@/' /@/etc/fstab
#5、修改快照中的grub.cfg
sudo sed -ri 's/root=UUID.*$/\0 rootflags=subvol=@/' /@/boot/grub/grub.cfg
2、重启系统
3、再次更新grub.cfg配置
#1、给grub配置项添加rootflags
echo 'GRUB_CMDLINE_LINUX_DEFAULT="rootflags=subvol=@ $GRUB_CMDLINE_LINUX_DEFAULT"' > 99_rootflags_subvol.conf
sudo mv 99_rootflags_subvol.conf /etc/default/grub.d/99_rootflags_subvol.conf
#2、重新生成grub.cfg
sudo update-grub
4、清理原根目录下的文件
#1、挂载根分区
sudo mount `df | grep -w / | awk '{print $1}'` /mnt
#2、清理根分区文件,要保留@目录。为了数据安全,建议手工一项一项来删除
cd /mnt
#以下命令仅做记录,建议手工一项一项删
#sudo rm -r !(@)
#sudo rm -r .*
#3、删除完成后再次确认,是否只留下了@目录
sudo ls -al /mnt
#4、卸载/mnt挂载点,并确认是否卸载成功
cd;sudo umount /mnt;df | grep mnt
牛人。
这就叫办法总比困难多。
我也来分享下我的操作。
操作前的基础环境是:一共分了efi、/、数据盘这3个分区,boot在根分区里,只根分区使用btrfs。
操作之后,根目录改到/@下。
0、操作前的分区情况
UUID=b5c645b1-4b98-4d61-a643-ffd164cb6789 / btrfs rw,relatime,ssd,space_cache,subvolid=5,subvol=/ 0 0
UUID=7A1A-9AED /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2
UUID="96df16da-7fe6-41c9-8c66-b9dfd5c20d72" /data ext4 rw,relatime 0 2
/data/home /home none defaults,bind 0 0
/data/opt /opt none defaults,bind 0 0
/data/var /var none defaults,bind 0 0
/data/root /root none defaults,bind 0 0
tmpfs /tmp tmpfs defaults,noatime,mode=1777,size=6g 0 0
1、创建快照并修改相关配置文件
#1、创建根分区快照
sudo btrfs subvolume snapshot / /@
#2、备份所需修改的文件或目录
sudo cp -a /boot/efi/EFI /boot/efi/EFI_bak
sudo cp /@/etc/fstab /@/etc/fstab_bak
sudo cp /@/boot/grub/grub.cfg /@/boot/grub/grub.cfg_bak
#3、修改efi中的grub.cfg
sudo find /boot/efi/EFI -name grub.cfg | sudo xargs sed -i 's/\/boot/\/@\/boot/'
#4、修改快照中的fstab
sudo sed -i 's/subvol=\//subvol=@/' /@/etc/fstab
#5、修改快照中的grub.cfg
sudo sed -ri 's/root=UUID.*$/\0 rootflags=subvol=@/' /@/boot/grub/grub.cfg
2、重启系统
3、再次更新grub.cfg配置
#1、给grub配置项添加rootflags
echo 'GRUB_CMDLINE_LINUX_DEFAULT="rootflags=subvol=@ $GRUB_CMDLINE_LINUX_DEFAULT"' > 99_rootflags_subvol.conf
sudo mv 99_rootflags_subvol.conf /etc/default/grub.d/99_rootflags_subvol.conf
#2、重新生成grub.cfg
sudo update-grub
4、清理原根目录下的文件
#1、挂载根分区
sudo mount `df | grep -w / | awk '{print $1}'` /mnt
#2、清理根分区文件,要保留@目录。为了数据安全,建议手工一项一项来删除
cd /mnt
#以下命令仅做记录,建议手工一项一项删
#sudo rm -r !(@)
#sudo rm -r .*
#3、删除完成后再次确认,是否只留下了@目录
sudo ls -al /mnt
#4、卸载/mnt挂载点,并确认是否卸载成功
cd;sudo umount /mnt;df | grep mnt
第3步好像完全不用做,可以省掉
实际上deepin在子卷运行的很好,不知道为什么深度一直不提供安装到子卷功能。
不错,终于把 boot
分区干掉了
不过,在修改 efi
分区里面的配置重启后,grub
还是 boot
分区的
最后运行 sudo dpkg-reconfigure grub-efi-amd64
修改的 efi
才生效!
可能是那一长串的uuid你没有追改吧?
写的太匆忙忽略了。
可能是那一长串的uuid你没有追改吧?
写的太匆忙忽略了。
可能版本不同,修改完 grub.cfg
, 要更新 grubx64.efi
才生效!
rhett@rhett-PC:~$ ls -lh /boot/efi/EFI/deepin/
总计 3.2M
-rwxr-xr-x 1 root root 108 2023年 3月10日 BOOTX64.CSV
-rwxr-xr-x 1 root root 83K 2023年 3月10日 fbx64.efi
-rwxr-xr-x 1 root root 127 4月 3日 03:22 grub.cfg
-rwxr-xr-x 1 root root 1.2M 2022年 3月11日 grub.efi
-rwxr-xr-x 1 root root 284K 4月 3日 05:28 grubx64.efi
-rwxr-xr-x 1 root root 823K 2023年 3月10日 mmx64.efi
-rwxr-xr-x 1 root root 906K 2023年 3月10日 shimx64.efi
行文粗糙,有不妥之处假期再改吧,最关键的精华就是 sudo btrfs subvolume snapshot / @deepin
命令的使用,这条命令可以直接把/分区快照到@deepin子卷里。
想问下snapshot / @deepin 与 create sub @deepin; cp -a / @deepin有什么区别?
我们都知道deepin不支持安装系统boot到btrfs分区,更不要提安装到子卷了,实际上我们有一个很简单的方法安装deepin到btrfs分区的子卷,可以说物理机直接安装,也可以安装到虚拟机在导出到物理机,今天就先简单说一下直接物理机btrfs子卷的方法。大家知道linux硬盘分区时sda1、NVMe0n1p2之类的,为了照顾不同的硬盘,也为了叙述方便,本帖一概按1#分区2#分区方式叙述。
在用启动优盘启动安装程序后,选择手动分区,把硬盘分为三个分区:1#分区为efi分区,这个没什么可说的,2#分区为btrfs分区,挂载为/分区,3#分区为ext3、ext4分区,挂载为boot目录。为什么要把boot分到3#分区呢?当然是我有强迫症了,诸位看官看到最后就明白了。
现在正常安装系统,完成后进入系统,在根目录下执行命令:sudo btrfs subvolume snapshot / @deepin
现在在你的系统根目录下既有个@deepin子卷,里面有个半成品的系统了,为什么说是半成品呢?因为它几个缺点,不能直接使用。
sudo btrfs subvolume show
查询下ID参数。注意删除/boot挂载boot分区那行,因为我们已经复制boot分区内容到子卷boot目录了。UUID=b28288ee-cb94-4c59-933f-05ab523f7f97 / btrfs defaults,subvol=@deepin 0 0rootflags=subvol=@deepin
参数告诉内核去那里挂载根目录就可以了。现在引导进子卷系统,执行命令
sudo update-grub
更新下子卷的grub.cfg文件基本成形了。还没完,现在还有修改一个efi分区下的小grub.cfg文件,就在这里:
在efi分区的boot目和deepin等目录下可以找到它,打开内容如下,注意第二行,高息grub2那里可以找到grub.cfg文件,要修改成子卷里的grub.cfg路径。
现在到了杀驴时刻了,你可以删除根目录下的所有常规文件,注意别铲除@deepin子卷,然后在删除3#分区,并入2#分区。
为什么要把boot分区放到3#分区,你理解了吗?