[Exchange and share] 系统分区转f2fs,问题踩坑记录
Tofloor
poster avatar
sleepytime
deepin
2024-04-05 15:56
Author

参考:https://bbs.deepin.org/zh/post/211534,提供了思路,非常感谢原作者。

环境:

安装v23 beta3系统时:设置了3个分区:efi分区、/分区(ext4)、swap分区。

需求:

周末刚好想尝试下把系统分区转成,f2fs文件系统。可能更适合笔记本的nvme,延长寿命。

准备工作:

livecd:ubuntu-22.04.4-desktop-amd64.iso (尝试过deepin-desktop-community-23-Beta3-amd64.iso, tty2的startx进不了桌面,放弃)

移动硬盘:备份数据。

操作:

(1)在deepin商店中安装timeshift, 把 /分区 的数据备份到移动硬盘。

(2)进入livecd,sudo -i 切换到root,换清华源,apt install f2fs-tools,ubuntu软件商店中安装timeshift。

(3)使用ubuntu的gpartd,笔记本本机硬盘,格式化/分区为f2fs格式。或者使用命令行:

mkfs.f2fs -O extra_attr,inode_checksum,sb_checksum /dev/sdxY

(4)插上移动硬盘,ubuntu会自动挂载。

打开timeshift,选择rsync。

timeshift会自动找到移动硬盘的备份文件,点击恢复。

我没有拍照,参考别人的图,改成自己的分区情况。

image.png

注意在Device中 只选择 自己硬盘上所有的独立分区,其它都选择keep on root device。

故我的情况,选的是efi、/ 2个分区。

image.png

勾选2个即可。initramfs一般不用勾选, 之前已备份过了。

使用timeshift恢复后,可以检查下boot下文件有没有。

然后一直继续下一步,等待漫长的时间。

提示恢复完毕,重启即可。

问题来了

1 始终会进入grub命令行界面,无法正常引导

尝试过livecd 修复grub工具,手动命令安装到硬盘,chroot后安装到硬盘,都不行。

尝试过启动后在grub命令行中,各种set命令,都不行。

查询arch wiki:

尽管 GRUB 自2.0.4起支持 F2FS 文件系统,GRUB还是不能从启用extra_attr flag 的 F2FS 分区正确读取引导文件。

如果根目录分区是一个GRUB不支持的文件系统,那就需要为 /boot 单独分区,并使用一个支持的文件系统。某些情况下,GRUB 的开发版 grub-gitAUR 可能已经支持了那个文件系统。

如果将 GRUB 和一个不支持的文件系统一起用,它将无法提取到你的驱动器的 UUID,只能使用传统的名称 /dev/sdXx 来代替,而这个名称是可能会变化的。此时你可能需要手动编辑 /boot/grub/grub.cfg,将 root=/dev/sdXx 改为 root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX。你可以使用 blkid 命令来获取你的设备的 UUID ,参见 Persistent block device naming。

解决方法:

使用livecd, 新增boot分区ext4。

从3个分区变为4个分区,由于没有空间,f2fs不支持缩容,原先3个分区的位置顺序等缘故。所以除了第一个efi分区,其他3个分区都重建了。只能再次使用timeshift把系统分区的数据还原回来。

终于可以看见熟悉的grub引导项了。

2 开机启动慢,自检时间非常长,卡在系统启动的日志上

Dependency failed for Swaps.

Dependency failed for /dev/disk/by-uuid/xxxx

Timed out waiting for device /dev/disk/by-uuid/xxx

解决方法:

由于我重建了swap分区,uuid变了,忘了修改/etc/fstab。

尝试过,进入tty2,root居然没有修改权限,用livecd改了。

3 还是进不了deepin图形界面,卡在系统启动的日志上

failed xxx docker。

docker启动失败,然后livecd进入,rm /etc/systemd/system/multi-user.target.wants/docker.service。

先解决进入桌面的问题,以后再解决docker启动不了的问题。

4 还是进不了deepin图形界面,卡在系统启动的日志上

Failed to start Remount Root and Kernel File Systems.

查询arch wiki:

image.png

我使用了arch推荐的选项参数,在fstab中:atgc,gc_merge,lazytime

~# find /boot -iname grub.cfg -exec ls -lh {} ;
-rw-r--r-- 1 root root 4.8K  2月 8日 01:02 /boot/grub/grub.cfg
-rwxr-xr-x 1 root root 117  2月 7日 21:31 /boot/efi/EFI/boot/grub.cfg
-rwxr-xr-x 1 root root 117  2月 7日 21:31 /boot/efi/EFI/deepin/grub.cfg
nano /boot/grub/grub.cfg
linux  /boot/vmlinuz-6.6.7-amd64-desktop-hwe root=UUID=5562ce5c-7df8-49e0-ad00-91af27245a21 ro  splash quiet  DEEPIN\_GFXMODE=\$DEEPIN\_GFXMODE

搜索到ro,修改为rw即可。或者添加rootflags=atgc,测试过也可以。

最终成功进入系统桌面,docker问题也解决了:

systemctl enable docker.service

systemctl start docker.service

systemctl status docker.service

隐藏boot分区:https://bbs.deepin.org/post/203517,感谢网友。

先体验一段时间。

Reply Favorite View the author
All Replies
AMZ
deepin
2024-04-05 21:18
#1
额,我另一个号的文章,这里面根本无需单独boot,我只是懒得说明情况,实际上grub界面通过命令即可引导起来,起来后你就容易修复多了
Reply View the author
sleepytime
deepin
2024-04-06 15:02
#2
AMZ
额,我另一个号的文章,这里面根本无需单独boot,我只是懒得说明情况,实际上grub界面通过命令即可引导起来,起来后你就容易修复多了

哈哈,我不是很熟悉,新手第一次用timeshift和grub命令行,很多不明白,各种失败。非常感谢,学习了!

Reply View the author