树莓派使用f2fs作为根文件系统
目录
前言
在TF卡、固态硬盘之类的nand存储介质上,f2fs比起ext4之类的文件系统在性能和寿命上都有较大优化。所以我决定使用f2fs来作为我树莓派3B的根分区。
操作简述
1.树莓派安装64位Raspberry PI OS Lite系统,此时树莓派TF卡根分区是ext4文件系统。
2.下载Debian LiveCD ISO镜像并刻录到U盘。
3.PC上,用U盘启动Debian liveCD系统,在Debian liveCD系统中用tar命令备份树莓派TF卡的根分区。
4.在PC的Debian liveCD系统中把TF卡的根分区格式化成f2fs。
5.在PC的Debian liveCD系统中使用tar命令将备份的系统恢复到f2fs的根分区。
详细操作步骤
1. 给树莓派安装Raspberry PI OS Lite
这里要用到树莓派官方的Raspberry Pi Imager镜像写入工具给TF卡写镜像。操作系统要选64位的,64位的才能更好发挥出树莓派3B的arm64处理器性能。用Raspberry PI OS Lite版(其实就是debian11),Lite版不带桌面环境,体积小。树莓派启动后,执行lsblk -f 发现树莓派的根分区文件系统是ext4. Raspberry PI OS Lite的是Linux 6.1内核的,能支持f2fs,所以不需要修改initrd。
2. 刻录Debian liveCD启动U盘
1-从163镜像站下载五桌面环境的Debian liveCD ISO镜像文件。http://mirrors.163.com/debian-cd/current-live/amd64/iso-hybrid/debian-live-12.5.0-amd64-standard.iso
2-windows下用ultrISO,linux下用dd命令把liveCD镜像写入U盘。ultraISO:用“启动”-->“写入硬盘映像”功能。dd命令(假设u盘对应/dev/sdX1):dd if=镜像iso文件 of=/dev/sdX1 bs=1M
3-把制作好的U盘插入PC,启动Debian Live系统。
3. 备份TF卡Linux根分区
把已经插入TF卡的读卡器链接到PC。
sudo su - # debian live系统切换到root用户
mkdir /mnt/raspi-root; mount /dev/sdX2 /mnt/raspi-root # 把还是树莓派TF卡linux根分区挂载到raspi-root目录。这里假设树莓派TF卡的linux根分区位于sdX2(可以用lsblk -f命令或fdisk -lu命令判断)
cd /mnt/raspi-root #切换到树莓派TF卡的linux根分区
tar zcpf /tmp/rootfs.tar.gz --one-file-system --exclude=lost+found --exclude=dev . # 将当前目录(TF卡linux根分区)下的所有文件备份到/tmp/rootfs.tar文件。这里是冷备份,排除掉lost+found、dev两个目录即可,proc、sys、boot目录是空的,不需要排除它们。*** 注意 ***,这里有个英文点号,表示当前目录(TF卡linux根分区挂载目录)。此时树莓派TF卡linux根分区已经备份到live系统的/tmp路径下了。备份好后,千万不要关机,live系统中的数据会丢失,当然你也可以备份到另一个U盘,这样意外关机也不怕。
ls -l >/tmp/raspi-rootfs-dir.txt # 把树莓派TF卡linux根分区的目录详情(比如目录名、权限等)记录到备份u盘的txt文件,方便后面恢复使用。
4. 格式化树莓派TF卡linux根分区为f2fs文件系统
apt install f2fs-tools # 此时live系统就具备了格式化f2fs的能力
umount /dev/sdX2 # 取消树莓派TF卡linux根分区的挂载,准备格式化分区为f2fs
mkfs.f2fs -f /dev/sdX2 # 执行建立f2fs文件系统,并格式化。这里假设TF卡linux根分区在live系统中是/dev/sdX2,你可以在执行前,使用lsblk -f或fdisk -lu /dev/sdX命令来确认TF卡linux根分区是哪个。
5.恢复树莓派系统备份
mount /dev/sdX2 /mnt/raspi-root #挂载树莓派tf卡linux根文件系统
cd /mnt/raspi-root
mkdir dev; chmod 755 dev # 前面tar备份的时候排除了dev目录,所以这里要新建dev目录。
tar xpf /tmp/raspi-root/rootfs.tar.gz --numeric-owner # 恢复树莓派系统到TF卡新的f2fs根分区
vi etc/fstab # 修改树莓派TF卡分区下的etc/fstab文件中的ext4文件系统为f2fs,我看里面的分区UUID和ext4下的没有变化,所以文件中的分区UUID不用动
mkdir /mnt/tf-boot; mount /dev/sdX1 /mnt/tf-boot #把树莓派TF卡boot分区挂载到/mnt/tf-root目录下,这里假设树莓派TF卡的boot分区在live系统中位于/dev/sdX1
vi /mnt/tf-root/cmdline.txt #修改树莓派TF卡boot分区下的cmdline.txt中的ext4文件系统为f2fs。最后umount树莓派TF卡的boot分区和linux根分区,拔卡,插入树莓派,启动。大功告成。