[Share Experiences] 固态硬盘使用f2fs文件系统作为deepin引导分区
Tofloor
poster avatar
AMZ
deepin
2024-04-05 22:38
Author

开头一张效果图

介于软件的迭代升级,所以对本文内容做一定的修改,对deepin23rc版本及以上适用

流程
  1. grub版本大于2.04才能支持f2fs识别,采用如下命令得知我们的grub是2.12版本,符合要求。
   grub-install --version
   grub-install (GRUB) 2.12-1deepin6
  1. 让Linux内核加载f2fs模块
  • 安装f2fs工具支持
    sudo apt install f2fs-tools
  • initrd镜像文件中加载f2fs模块编辑
    sudo nano /etc/initramfs-tools/modules
  • 写入
   f2fs
   crc32\_generic
   crc32\_intel
  • 刷新initrd

sudo update-initramfs -u

  1. 选择一个你顺手的备份系统的工具,只备份文件,我这里选择用一个移动硬盘分出一块ext4的分区,用timeshift备份,采用rsync模式这样不管电脑硬盘怎么折腾都还有救。
    选择一个自己趁手的Linux live系统,要能够接下来安装timeshift和f2fs-tools和gparted打开gp磁盘工具将除esp、swap分区外其它都可以格式化为f2fs,打开timeshift配置路径到我的移动硬盘,恢复之前备份的系统,选对分区与前分区数据的对应关系,否则恢复出问题。结束后timeshift会帮你把fstab文件按照新的分区情况刷新了。

  2. 接下来我们要修改几处文件
    第一处:

    /boot/grub/grub.cfg
    将里面的ext4全部替换为f2fs
    将里面的boot目录所在分区UUID全部修改为f2fs之后的,可使用blkid查看
    

    第二处:

    EFI/deepin/grub.cfg
    EFIuniontech/grub.cfg
    EFI/boot/grub.cfg
    EFI/UOS/grub.cfg
    EFI分区里,有几个算几个,全部编辑,UUID与boot目录所在分区的保持一致
    示例:
    search.fs_uuid d7d81d36-6cf3-400a-bf9b-6f48c6919b05 root hd0,gpt3
    set prefix=($root)'/boot/grub'
    configfile $prefix/grub.cfg
    

    第三处:

    /etc/fstab
    UUID=d7d81d36-6cf3-400a-bf9b-6f48c6919b05	/	f2fs 	rw,relatime	0	1
    
    UUID=68391d36-6cf3-400a-bf9b-6f48c6919b05	/home	f2fs	   rw,relatime	0	2
    
    UUID=7C33-3E9A	/boot/efi	vfat	rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro	0	2
    
    UUID=631ad277-8410-4edb-8466-a9a1da1b01ab	 none	 swap	defaults,pri=-2	0	0
    
  3. 重启验证,如果非正常启动看到grub命令界面了,可以依次输入如下并回车:

    set root=(hd0,gpt3)/boot/grub
    set prefix=(hd0,gpt3)/boot/grub
    insmod normal
    normal
    

    其中hd0代表第一块磁盘 gpt3代表第三个分区,这个依照自己的情况,root指引导内核所在分区。拔掉你的u盘避免干扰
    这个时候电脑不出意外就启动了,重新执行一次update-grub命令,再检查一下

    /etc/fstab
    /boot/efi/EFI/deepin/grub.cfg
    /boot/grub/grub.cfg
    

    三个地方,对应的分区uuid值对不对
    祝好运!

Reply Favorite View the author
All Replies
jjcui8595
deepin
2024-04-05 23:03
#1

学习了

Reply View the author
sleepytime
deepin
2024-04-06 15:06
#2

学习了,感谢!

Reply View the author
dreamcast
deepin
2024-04-07 23:24
#3

分享一下我的單SSD做的Live系統,squashfs檔和persistence都在f2fs上。😄

Screenshot_deepin-terminal_20240407151807.png

Reply View the author
AMZ
deepin
2024-04-08 07:08
#4
dreamcast

分享一下我的單SSD做的Live系統,squashfs檔和persistence都在f2fs上。😄

Screenshot_deepin-terminal_20240407151807.png

希望推出相关的介绍文章

Reply View the author
dreamcast
deepin
2024-04-08 16:54
#5
AMZ

希望推出相关的介绍文章

。這裡我用的 f2fs分區的 label名是 mediumEFI的叫 DEEPINOS

EFI分區下只有這些的:
截图_选择区域_20240408072040.png

boot cmdlinepersistence-label=那個f2fs的labelpersistence都是 live-boot軟件包的一部份。並不是我加上去的,live-* 軟件包本身就挺多功能的。

然後你在 f2fs分區下寫一個 persistence.conf檔:

截图_选择区域_20240408072557.png

我這個例子比較多目錄和複雜,因為我這是事後在 persistence加裝的 docker但我又想每次都不保留 Live user的東西,你可以自己定制屬於你需要的。

基本上是你需要為 union的目錄下再 mkdir多一個 rwwork(即基本 overlay的操作),bind的你就只需要相對應的目錄。這裡沒有 link的例子,你有需要時再了解 link的作用吧。

persistence
├── etc
│   ├── apt
│   │   └── apt.conf.d
│   │       ├── rw
│   │       └── work
│   ├── default
│   │   ├── rw
│   │   └── work
│   ├── docker
│   ├── dpkg
│   │   └── dpkg.cfg.d
│   │       ├── rw
│   │       └── work
│   ├── init.d
│   │   ├── rw
│   │   └── work
│   ├── needrestart
│   ├── rc0.d
│   │   ├── rw
│   │   └── work
│   ├── rc1.d
│   │   ├── rw
│   │   └── work
│   ├── rc2.d
│   │   ├── rw
│   │   └── work
│   ├── rc3.d
│   │   ├── rw
│   │   └── work
│   ├── rc4.d
│   │   ├── rw
│   │   └── work
│   ├── rc5.d
│   │   ├── rw
│   │   └── work
│   ├── rc6.d
│   │   ├── rw
│   │   └── work
│   └── systemd
│       ├── rw
│       │   └── system
│       └── work
├── openharmony-docker
├── opt
├── usr
│   ├── rw
│   └── work
└── var
    ├── cache
    │   ├── apt
    │   │   ├── rw
    │   │   └── work
    │   └── man
    └── lib
        ├── apt
        │   ├── rw
        │   └── work
        ├── docker
        └── dpkg
            ├── rw
            └── work

Reply View the author