固态硬盘上安装centos_固态硬盘使用f2fs作为根分区安装linux-程序员宅基地

技术标签: 固态硬盘上安装centos  

前言

在固态硬盘上,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问题记录"

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36230923/article/details/112949788

智能推荐

如何配置filezilla服务端和客户端_filezilla server for windows (32bit x86)-程序员宅基地

文章浏览阅读7.8k次,点赞3次,收藏9次。如何配置filezilla服务端和客户端百度‘filezilla server’下载最新版。注意点:下载的版本如果是32位的适用xp和win2003,百度首页的是适用于win7或更高的win系统。32和64内容无异。安装过程也是一样的。一、这里的filezilla包括服务端和客户端。我们先来用filezilla server 架设ftp服务端。看步骤。1选择标准版的就可以了。 _filezilla server for windows (32bit x86)

深度学习图像处理01:图像的本质-程序员宅基地

文章浏览阅读724次,点赞18次,收藏8次。深度学习作为一种强大的机器学习技术,已经成为图像处理领域的核心技术之一。通过模拟人脑处理信息的方式,深度学习能够从图像数据中学习到复杂的模式和特征,从而实现从简单的图像分类到复杂的场景理解等多种功能。要充分发挥深度学习在图像处理中的潜力,我们首先需要理解图像的本质。本文旨在深入探讨深度学习图像处理的基础概念,为初学者铺平通往高级理解的道路。我们将从最基础的问题开始:图像是什么?我们如何通过计算机来理解和处理图像?

数据探索阶段——对样本数据集的结构和规律进行分析_数据分析 规律集-程序员宅基地

文章浏览阅读62次。在收集到初步的样本数据之后,接下来该考虑的问题有:(1)样本数据集的数量和质量是否满足模型构建的要求。(2)是否出现从未设想过的数据状态。(3)是否有明显的规律和趋势。(4)各因素之间有什么样的关联性。解决方案:检验数据集的数据质量、绘制图表、计算某些特征量等,对样本数据集的结构和规律进行分析。从数据质量分析和数据特征分析两个角度出发。_数据分析 规律集

上传计算机桌面文件图标不见,关于桌面上图标都不见了这类问题的解决方法-程序员宅基地

文章浏览阅读8.9k次。关于桌面上图标都不见了这类问题的解决方法1、在桌面空白处右击鼠标-->排列图标-->勾选显示桌面图标。2、如果问题还没解决,那么打开任务管理器(同时按“Ctrl+Alt+Del”即可打开),点击“文件”→“新建任务”,在打开的“创建新任务”对话框中输入“explorer”,单击“确定”按钮后,稍等一下就可以见到桌面图标了。3、问题还没解决,按Windows键+R(或者点开始-->..._上传文件时候怎么找不到桌面图标

LINUX 虚拟网卡tun例子——修改_怎么设置tun的接收缓冲-程序员宅基地

文章浏览阅读1.5k次。参考:http://blog.csdn.net/zahuopuboss/article/details/9259283 #include #include #include #include #include #include #include #include #include #include #include #include _怎么设置tun的接收缓冲

UITextView 评论输入框 高度自适应-程序员宅基地

文章浏览阅读741次。创建一个inputView继承于UIView- (instancetype)initWithFrame:(CGRect)frame{ self = [superinitWithFrame:frame]; if (self) { self.backgroundColor = [UIColorcolorWithRed:0.13gre

随便推点

字符串基础面试题_java字符串相关面试题-程序员宅基地

文章浏览阅读594次。字符串面试题(2022)_java字符串相关面试题

VSCODE 实现远程GUI,显示plt.plot, 设置x11端口转发_vscode远程ssh连接服务器 python 显示plt-程序员宅基地

文章浏览阅读1.4w次,点赞12次,收藏21次。VSCODE 实现远程GUI,显示plt.plot, 设置x11端口转发问题服务器 linux ubuntu16.04本地 windows 10很多小伙伴发现VSCode不能显示figure,只有用自带的jupyter才能勉强个截图、或者转战远程桌面,这对数据分析极为不方便。在命令行键入xeyes(一个显示图像的命令)会failed,而桌面下会出现:但是Xshell能实现X11转发图像,有交互功能,但只能用Xshell输入命令plot,实在不方便。其实VScode有X11转发插件!!方法_vscode远程ssh连接服务器 python 显示plt

element-ui switch开关打开和关闭时的文字设置样式-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏2次。element switch开关文字显示element中switch开关把on-text 和 off-text 属性改为 active-text 和 inactive-text 属性.怎么把文字描述显示在开关上?下面就是实现方法: 1 <el-table-column label="状态"> 2 <template slot-scope="scope">..._el-switch 不同状态显示不同字

HttpRequestUtil方法get、post、JsonToPost_httprequestutil.httpget-程序员宅基地

文章浏览阅读785次。java后台发起请求使用的工具类package com.cennavi.utils;import org.apache.http.Header;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apach_httprequestutil.httpget

App-V轻量级应用程序虚拟化之三客户端测试-程序员宅基地

文章浏览阅读137次。在前两节我们部署了App-V Server并且序列化了相应的软件,现在可谓是万事俱备,只欠东风。在这篇博客里面主要介绍一下如何部署客户端并实现应用程序的虚拟化。在这里先简要的说一下应用虚拟化的工作原理吧!App-V Streaming 就是利用templateServer序列化出一个软件运行的虚拟环境,然后上传到app-v Server上,最后客户..._app-v 客户端