zoukankan      html  css  js  c++  java
  • 固态硬盘使用f2fs作为根分区安装linux

    前言

    在固态硬盘上,f2f比起ext4之类的文件系统在性能和寿命上都有较大优化。所以我决定使用f2fs来作为我debian的根分区。

    碰到的问题

    • 安装debian过程中,到硬盘分区的阶段没有f2fs文件系统的选项
    • grub默认不支持f2fs
    • initramfs默认不支持f2fs

    对策

    因为grub不支持f2fs,所以boot必须和根分区独立出来,且/boot分区的文件系统格式必须是grub能识别的。这样grub才能引导/boot分区中的内核。然后由/boot分区中的带f2fs模块的initrd来识别f2fs根分区继续完成操作系统启动。总结起来就是 grub2 -> /boot分区 (载入内核,载入带fsfs模块的initrd) -->通过支持f2fs的initrd引导根分区操作系统。

    安装过程简述:
    1.使用常规流程安装debian,要分配独立的boot分区。进入系统后,安装f2fs-tool, 并且更新initramfs(也就是更新initrd文件),此时,这个系统在备份操作前就已经具备识别f2fs的能力,initrd也能在引导过程中识别f2fs的根分区了。
    2. 进入debian liveCD,使用tar命令备份固态硬盘linux根分区。live系统也安装f2fs-tool, 这样live系统就具备格式化固态硬盘linux根分区的能力。格式化固态硬盘linux根分区为f2fs后,再使用tar命令将刚才的备份恢复到f2fs的根分区。
    3. 修改f2fs中的etc/fstab中的uuid,因为上面格式化操作会导致uuid变化
    4. 在live系统中,chroot到固态硬盘的linux,更新grub,使之能脱离u盘独立引导固态硬盘的操作系统。
    

    我的实际操作步骤

    0.警告

    任何时候,不要相信序号,比如sda3 sda2。而是执行下面的命令,通过多个指标判断,比如分区大小、格式等。否则数据误删很麻烦。
    这些命令有:
        fdisk -lu 或 fdisk -lu /dev/sdXn
        lsblk 
        lsblk -f (加了-f选项后有变化,自己试一下)
        blkid 
    

    1. 准备

    1-为了方便和安全起见,最好准备两个u盘,一个用于安装操作系统,一个用于放debian liveCD。存放liveCD的U盘能让你在电脑操作系统起不来的时候,可以救急。
    2-中途涉及多次联网的步骤,可以使用网线,也可以手机通过usb数据线共享4g流量或wifi数据到电脑(电脑能看到类似enp4s0u1的网卡就是手机usb共享4G网络的网卡,这里的u就是usb的意思)。当然还可以用热点共享手机的4G流量(liveCD模式下命令行连热点的时候,没有前两种方式那么方便,所以我一般是用usb线连接手机共享手机的4G网络)
    

    2. 分区

    sda1:  ESP(EFI System Partition----EFI系统分区)
    sda2: BOOT分区,btrfs
    sda3: 根分区,btrfs 
    sda4, 交换分区,swap
    

    3. 使用网络安装debian10

    1- 我从debian官网下了个最小化的iso,大概300m,也有50M的mini.iso。之所以使用网络安装是因为,我发现通过网络安装debian的问题最少(比如字体、输入法、中文显示等)。
    2- 刻录安装debian用的iso文件到U盘,这里使用dd,win下可以使用ultraISO。(同样的方式,用liveCD的ISO刻录到另一个u盘,作为意外救急的准备)
               dd if=netinst.iso of=/dev/sdX bs=1M   #注意这里是sdX(u盘),不是sdXn(u盘的某分区)。sdX是u盘,不要搞错,否则硬盘数据丢失
    3- 把刻录好的U盘插到笔记本上,使用u盘启动。分区的时候按照上面的方式分,记住esp分区和boot分区必须和根分区分开。建议安装的时候,最小化安装,首先保证流程通了,再尝试带桌面的全量安装,这样比较稳妥。
    4- 安装完系统后,进入系统,终端执行命令安装f2fs-tools:  apt install f2fs-tools 
    5- 在/etc/initramfs-tools/modules文件末尾添加三行:  
           f2fs
           crc32_generic
           crc32_intel
       然后执行update-initramfs -u更新initrd。通过这两个步骤,就可以保证备份根目录前,initrd镜像文件中存在f2fs模块了,能支持f2fs根分区引导了。
    6- 格式化刚刚安装系统用的u盘,为下面第4大步中备份用途做准备。
    

    4. 备份根分区

       使用刻录了**LiveCD**的U盘启动后进入live系统
       执行sudo su -  切换到root用户
       执行mkdir /tmp/3; mount /dev/sdX3  /tmp/3  (假设SSD的根分区位于sdX3, 这里把还是btrfs的根分区挂载到/tmp/3目录)
       执行mkdir /tmp/u; mount /dev/sdY1  /tmp/u (这里假设/dev/sdY1是备份u盘的第一分区, 执行完命令后,备份用的u盘就挂载到/tmp/u目录了)
       然后执行下面命令:      
          cd /tmp/3  #cd的ssd的根分区
          tar cpf /tmp/u/root.tar  .  #将当前目录(ssd的根分区)下的所有文件备份到/tmp/u/root.tar文件。注意,这里有个英文点号。此时固态硬盘根分区已经备份到备份u盘中了。继续下面的第5大步
    

    5. 修改固态硬盘linux根分区为f2fs

    1-为了下载更快,修改live系统的软件源 vi /etc/apt/sources.list为中科大的源。执行apt update (可能没网络。需要连网线,或手机通过usb数据线共享4g或wifi网络到电脑,然后执行dhclient获取dhcp自动配置的ip地址才能联网)
    2-执行apt install f2fs-tools 此时live系统就具备了识别和格式化f2fs的能力
    3-执行umount /dev/sdX3   #取消ssd根分区的挂载,准备格式化分区为f2fs
    4-执行fdisk /dev/sdX进入fdisk的交互命令中
            执行p命令查看当前分区,找到固态硬盘的linux根分区(如前文说的,通过分区大小判断是不是linux根分区)
            执行d命令删除固态硬盘linux根分区
            执行n命令新建分区
            执行w命令将刚才的变更写入固态硬盘
       执行mkfs.f2fs  /dev/sdXn  (执行前,务必使用fdisk -lu  /dev/sdX来确认根分区是哪个,因为序号会在上面的分区操作中发生变化)
       现在执行lsblk -f就可以看到固态硬盘的linux根分区变成f2fs格式了。
    

    6.恢复备份

    1-  mount /dev/sdX3 /tmp/3  
        cd /tmp/3
        tar xpf /tmp/u/root.tar  #恢复备份
    2-上面删分区、建分区操作导致uuid变化。需要修正uuid。
       执行lsblk -f或blkid命令获取f2fs根分区的uuid
       执行 vi /tmp/3/etc/fstab  找到根分区的uuid修改成正确的值。
    

    7.更新grub:

       mount /dev/sdX2 /tmp/3/boot          #把ssd上的boot分区挂在到ssd根分区的boot目录
       mount /dev/sdX1 /tmp/3/boot/efi      #把ssd上的esp分区挂到ssd根分区boot目录的efi目录下
       mount --bind /dev /tmp/3/dev
       mount --bind /proc /tmp/3/proc
       mount --bind /sys  /tmp/3/sys
       mount --bind /run  /tmp/3/run
       chroot /tmp/3                        #chroot到固态硬盘的linux
       update-grub2 #可能会报错,但是不要紧
       执行poweroff,拔掉u盘,启动即可进入操作系统。
    
    另外: 意外有时不可避免,比如grub引导不了,initramfs无法挂载根分区等。救急操作参考本博客的另一偏随笔:"桌面版linux问题记录"
    
  • 相关阅读:
    「题解」:07.16NOIP模拟T1:礼物
    「题解」:07.16NOIP模拟T2:通讯
    「题解」:图论专题总结
    07.07NOIP模拟赛
    [复习]平衡树splay
    「题解」:[组合数学][DP]:地精部落
    「题解」:[组合数学]:Perm 排列计数
    「题解」:[组合数学]:排队
    dp 杂题
    插头 dp 总结
  • 原文地址:https://www.cnblogs.com/mind-water/p/11807150.html
Copyright © 2011-2022 走看看