[troubleshoot][archlinux][bcache] 修改linux文件系统 / 分区方案 / 做混合硬盘 / 系统转生大!手!术!(调整底层架构,不!重!装!)

目标:

  我要做的事情是:修改文件系统,硬盘分区方案,但是不重装系统,整个操作不被应用层感知。

背景:

我的笔记本 ThinkPad T450。8G内存 + 16GB SSD + 1TB HDD。预装windows7。

在预装系统里16GB的SSD好像是被win7用作睡眠之类的功能。电脑拿到手之后的第一件事我就是想办法把linux装进去。我当初的方案是:

  1. 备份win7。比较是预装的,也算是正版。我把1TB硬盘C盘中的文件压缩拷贝出来了。然后又把硬盘开始1G
B dd了出来。这样有一点可以装回去,给其他人用,当我有一天换了新本之后。

  2. 重装了win7。因为win7安装的时候,会认出16GB的SSD,并且自动的装东西进去。所以要重装(忘记了具体怎么做的了)为了让16GB分离出来。只将win7装到HDD的前50GB里边。再分一个200多GB用做D盘。

  3. 把archlinux装进了SSD。并且从SSD引导。这样,启动不同的系统,只有选择不同的启动盘就可以了,而无需安装双引导。SSD挂载根目录。/home目录挂到HDD剩下的700多GB的分区里。

  4. 由于SSD比较小,我把/var/下面的pacman cache设置到了/home下。此外又这是了基于文件的swap,改文件也位于/home下。

  5. 这样的话,基本就可用了。而且我还洋洋自得了很久。感觉高效的利用了SSD。

  就这样一直使用了1年2个月一直到今天。重要,根目录还是增长到了80% 导致系统运行变得很慢。SSD的性能在快满的时候,会变得很慢(我仿佛记得)。而且更重要的是,swap是机械的,交换的时候真的很明显。

  综上,终于有了结论,我的方案失败了。。。

新方案:

  方案最终于的核心内容就是,如何把只有16GB的SSD用起来?

  市面上有一种硬盘叫混合硬盘。它的原理是,在机械硬盘前有一个小小的固态硬盘,用来缓存。据说性能与固态硬盘无异。可是,咦!为什么要提这个呢? 因为在linux下,我们可以自制。是的。

  大概这几种吧:FlashCache,dm-cache,lvm-cahce,bcache。

  flashcache是facebook搞的,性能很好,但是没有进内核,需要编内核。lvm-cache是红帽搞的,听说性能不太好?而且archwiki里也没用。另一个不知道。bcache,入了内核,就它了!链接不一一提供了,请自寻。

  然后是文件系统的问题:ext4,xfs,btrfs,zfs。

  其实我想用btrfs,但是还是高实验性啊,不稳定啊,还是涮了。zfs要单装内核模块。ext4比较好,但是xfs被redhat7默认了。所以我就选xfs了。

  最后,用LVM。方便高级为何不要?

开始:

1. U盘启动。

  进U盘系统,就是arch的安装盘啊。

2. 把所有目录按原结构挂载至 /mnt/ROOT_FS/ 目录下。

  对啊,把原系统挂起来,准备备份,准备重做。

3. 台式机与启动U盘分别安装rsync工具。

  rsync比较高级吧,其实我只用了它的scp功能,应该用些更高级的。

4. 启动台式机的ssh,打开防火墙。

  咻咻咻咻咻咻咻咻咻

5. 使用rsync命令将ROOT_FS拷贝至台式机硬盘。

  烤哇烤烤哇烤烤哇烤

6. 等待6个小时。。。 看电视剧,睡觉,吃东西,出去约会。。。

  等啊等等啊等等啊等

7. 考完了,一共380GB。。。开始弄吧。。。

  烤哇烤烤哇烤烤哇烤

8. 分区

  补充两份资料:

https://bcache.evilpiepirate.org/

https://evilpiepirate.org/git/linux-bcache.git/tree/Documentation/bcache.txt

https://wiki.archlinux.org/index.php/LVM

  关于对齐:https://wiki.archlinux.org/index.php/Partitioning#Partition_alignment

  现在工具已经可以自动检测是否对齐了,例如parted

8.1 给SSD分区

  parted mklabel gpt

  parted mkpart primary linux-swap(new) 1 50%

  parted mkpart primary 50% 100%

8.2 UEFI

  https://wiki.archlinux.org/index.php/EFI_System_Partition

  EFI启动需要一个FAT32的EFI分区。不能under LVM。用了让UEFI firmware启动这里边的bootloader application。

8.2.1 创建EFI分区ESP(EFI System Partition)

  A。使用GPT分区表

  B。推荐分区大小512MiB。  

  C。必须格式化为FAT32

  D。设置标记esp

8.2.2 如何修改EFI启动项

  有两种方式,一种是在OS里使用efibootmgr。这是一个linux命令。但是有时候也许有一些限制之类的,或者其他的莫名其妙的原因,在OS命令里不一定搞得定。这时候就可以用efi shell再试一试。有一些主板集成了efi shell。有些没有。没有集成的,就需要自行把efi shell安装到ESP中,然后中EFI loader中启动了。  

  

>mklabel gpt
>mkpart primary fat32 1 512
>mkpart primary 512 100%
>set 1 esp on

8.2.3 UEFI相关的知识

  介绍:http://www.rodsbooks.com/efi-bootloaders/principles.html

  安装:http://www.rodsbooks.com/efi-bootloaders/installation.html

8.2 装bcache-tools

  在AUR下载pkg文件 https://aur.archlinux.org/packages/bcache-tools/

  使用makepkg命名做包。

8.3 做bcache

  ESP要做在bcache外面。

  1. 做backing device

# make-bcache -B /dev/sda2

  2. 做caching device

# make-bcache -C /dev/sdb2

  3. 注册

# bcache-super-show /dev/sdb2|grep cset.uuid|cut -f3 > /sys/block/bcache0/bcache/attach
# ll /sys/fs/bcache

  其他:

  重启了之后只有 udev rule。才能保证重启被认到。

8.4 LVM

  1. 使用lvmdiskscan查看所有可以的设备。

  2. 将bcache0制作成pv

# pvcreate /dev/bcache0
# pvdisplay

  3. 创建vg

# vgcreate vg0 /dev/bcache0
# vgdispaly

  4. 创建lv

# lvcreate -L 50G vg0 -n lvroot
# lvcreate -l 100%FREE vg0 -n lvhome# lvdispaly

9. 将新分区按目录树结构重新挂载

# mount /dev/mapper/vg0-lvroot /mnt/ROOT_FS/
# mount /dev/mapper/vg0-lvhome /mnt/ROOT_FS/home/
# mount /dev/sda1 /mnt/ROOT_FS/boot

10. 使用rsync 将整机转生回新的文件系统。

  变变变变变变变变变

11. 拷贝完成前,学习一下bootloader

  0. 8.2.2中提到的efi shell

  如果想装,可以从这安装https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface#Obtaining_UEFI_Shell

  1. 之前用的是systemd-boot: https://wiki.archlinux.org/index.php/Systemd-boot

  systemd自带一个工具 bootctl。很简单,基于前文已经设置好的东西。只需要使用 bootctl install 命令就可以完成boot loader的安装。它会在/boot目录下放置两个文件

  /boot/EFI/systemd/systemd-bootx64.efi   

  /bootEFI/Boot/BOOTX64.EFI

  修改正确相应的配置文件之后,就可以用了:

  /boot/loader/loader.conf

  /boot/loader/entries/arch.conf

  

  2. 准备试一下,EFISTUB:https://wiki.archlinux.org/index.php/EFISTUB

    这个也比较简单。

    第一招: 直接修改UEFI页面选项,把启动参数内核位置等,写到UEFI选项中,UEFI直接启内核:

# efibootmgr -d /dev/sdX -p Y -c -L "Arch Linux" -l /vmlinuz-linux -u "root=/dev/sdBZ rw initrd=/initramfs-linux.img"

    记得 verify一下,省的搞错了

# efibootmgr -v

    第二招:完成第0小节。从UEFI选项进到 UEFI SHELL里。在UEFI SHELL里使用命令行,直接把内核启起来。

> fs0:
> /vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=/initramfs-linux.img

12. 按照11中的内容,考完开搞!

  1. 改 /etc/fstab

  2. 改boot loader, 删掉grub2, 留下systemd-boot

  3. efibootmgr, 整理一下乱糟糟的UEFI menu。

13. 重生! :)  

时间: 2024-10-13 15:11:40

[troubleshoot][archlinux][bcache] 修改linux文件系统 / 分区方案 / 做混合硬盘 / 系统转生大!手!术!(调整底层架构,不!重!装!)的相关文章

[转]linux最新分区方案

FROM : http://www.cnblogs.com/chenlulouis/archive/2009/08/27/1554983.html 我的服务器是500G.最重要的是/var分区一定要大(不论postfix邮件,还是LAMP的WEB 服务器等).最好是400G以上.具体的/boot 只要100M就足够了.下面是我的分区方案:硬盘500G 服务器分区的方案:分区类型 分区的实际大小/ 1G-2G (最少要150–250MB)/boot 32M-100M (启动分区,最多只要100M左

张明贵-Linux磁盘分区方案

[听课保持最大化的输入,分享交流保持最大化的输出] 服务器选择软RAID还是硬RAID? 应该选择硬RAID,软RAID多了一层软件,性能受到了一定程度上的限制 LVM卷,可以对磁盘空间进行动态调整 但是不建议使用这种方式,多了一层软件,应该提前规划好空间 硬盘使用前 要分区,格式化(创建文件系统) 硬盘分区 主分区 扩展分区 逻辑分区 主分区+逻辑分区 <= 4 可以不要扩展分区 直接将磁盘分为4个主分区 三个主分区 一个扩展分区(扩展分区里再划分逻辑分区,就是扩展分区包含逻辑分区,且逻辑分区

[archlinux][hardware] ThankPad T450自带SSD做bcache之后的使用寿命分析

这个分析的起因,是由于我之前干了这两个事: [troubleshoot][archlinux][bcache] 修改linux文件系统 / 分区方案 / 做混合硬盘 / 系统转生大!手!术!(调整底层架构,不!重!装!) [archlinux][hardware] 查看SSD的使用寿命 在12月06日完成了底层硬盘的调整之后,做了如下的硬盘指标统计: /home/tong/Workspace/system/bcache [[email protected]] [17:18] > cat 2016

Linux 文件系统分区基础

文件系统就是管理设备,组织文件的一些结构和算法. /boot分区,它包含了操作系统的内核和在启动系统过程中所要用到的文件, 建这个分 区是有必要的,因为目前大多数的PC机要受到BIOS的限制,况且如果有了一个单独的/boot启 动分区,即使主要的根分区出现了问题,计算机依然能够启动. /usr分区,是Red Hat linux系统存放软件的地方,如有可能应将最大空间分给它. /home分区,是用户的home目录所在地,这个分区的大小取决于有多少用户. 如果是多 用户共同使用一台电脑的话,这个分区

Linux“万能”分区方案

本文的分区方案,并不适用于所有情况,最好先确认一下你的服务器具体配置! 相关资料参照各类linux相关教程等. 如下:

腾讯云linux服务器分区方案

刚刚在腾讯云买了一台服务器,刚买的服务器的数据盘都是需要自己来分区的,下面就记录一下操作. 通过命令fdisk-l查看硬盘信息 可以看到有两块硬盘/dev/vda和/dev/vdb,启动vda是系统盘vdb是我们新增的数据盘. 2.执行以下命令,进入fdisk模式,开始对新增数据盘执行分区操作. fdisk 新增数据盘 以新挂载的数据盘“/dev/xvdb”为例: fdisk /dev/xvdb 回显类似如下信息: 3.输入“n”,按“Enter”,开始新建分区.回显类似如下信息: 表示磁盘有两

Linux各种分区方案

1.常规分区:(集群的某个节点) /boot 引导分区 200m左右 主分区 swap 交换分区,一般为内存的1.5倍,内存如果大于8G,就分配8-16G / Linux所有目录的顶点,使用剩余所有空间 2.数据重要(数据库.存储服务器) /boot 引导分区 200m左右 主分区 swap 交换分区,一般为内存的1.5倍,内存如果大于8G,就分配8-16G / Linux所有目录的顶点,100-200g /data 使用所有空间,存放数据 3.特大网站,门户网站 /boot 引导分区 200m

Linux分区方案

Linux服务器分区的方案: 分区类型 分区的实际大小 / 1G-2G (最少要150–250MB) /boot 32M-100M (启动分区,最多只要100M左右) /opt 100M-1G (附加应用程序) /tmp 40M-1000M (最大可以设为1G左右,如果加载ISO镜像文件就设为4G左右吧,一般不用那么多) /home 2G-10G (每个用户100M左右,具体自定.用户目录.) /usr 3G-10G 最少要500M左右,一般宽松的服务器要分到4-6G) /usr/local 3

【转】LINUX文件系统剖析

引自:http://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/   在文件系统方面,Linux? 可以算得上操作系统中的 "瑞士军刀".Linux 支持许多种文件系统,从日志型文件系统到集群文件系统和加密文件系统.对于使用标准的和比较奇特的文件系统以及开发文件系统来说,Linux 是极好的平台.本文讨论 Linux 内核中的虚拟文件系统(VFS,有时候称为虚拟文件系统交换器),然后介绍将文件系统连接在一起的主要结构.