论linux系统应如何设计硬盘分区和结构
前言
前两天我的家庭服务器主机硬盘崩了,被迫重刷系统,还好之前考虑过硬盘分区,不然我几百个G的数据就都没了(别管是什么数据)。想到虽然网上的硬盘分区教程很多,但是很多都只有操作步骤,完全没有考虑到个人的实际情况,所以我想单独写一篇文章来讲一讲硬盘分区。
维护成本
首先,更复杂的硬盘分区会带来更高的维护成本,尤其是对于刚接触linux类系统的用户而言。所以如果这是你第一次使用linux类系统,还是先老老实实的用最简单的分区设计。
而对于比较熟悉linux系统的用户或者需要一些特殊的功能的用户,也可以尝试更复杂的分区设计。但是尽量不要过度设计,一个分区能解决就不要分出来第二个分区,不然各种地方的问题叠到一起没多久就崩了。
虚拟机、双系统(副)
我刚开始接触linux的时候就是用了两周的虚拟机然后转成双系统。这类场景一般不会有很充裕的硬盘空间,也没有很多东西需要存储在系统里,硬盘空间大概率也是连续的,我装ubuntu双系统时也只分了40G。这种情况就不要考虑分区设计了,一般直接一个大分区就行了,如果需要存重要数据的话直接装一个ntfs3g把windows盘当移动硬盘挂载就行了。
主要还是因为空间太少了,分了也白分,有一个连续的大分区是此时最好的选择。
swap交换分区也是不需要的,毕竟这些年谁会给副系统睡眠呢?(睡眠功能需要大于自身内存大小的swap分区)
文件系统建议全部ext4,支持多又稳定,双系统首选。
例:双系统
设备 名称 容量 文件系统 挂载点
/dev/sda 硬盘 512G
├─/dev/sda1 ESP 256M fat32 /boot/efi
├─/dev/sda2 Win10-C盘 96G ntfs <不挂载>
├─/dev/sda3 Win10-保留 128G ms-reserve <不挂载>
├─/dev/sda4 Win10-D盘 256G ntfs <手动挂载>
└─/dev/sda5 linux系统 32G ext4 /
双系统(主)、主系统
把linux当主力系统的人其实不多,但是考虑到能看到这基本不是技术人员也是爱好开源,所以就当我没说。
如果你的硬盘超过256G或者有号几块硬盘就可以考虑硬盘分区了,因为实际使用中我从来没见过有任何一台linux机器的系统软件超过128G的(包括公司的服务器)。一般大量硬盘都会被视频、图片、文件、系统镜像等用户信息占用,而这些文件都可以统一放在数据分区中,防止用户数据堆积导致系统崩溃。
我安装的软件从来没超过32G,在往上肯定是什么软件默认存储位置在根分区,移出来就好了。
- 建议根目录64G,剩下的给/home分区
- 如果装的软件很多的话(超过16G)可以单独给/usr分区64G
- 需要睡眠功能的话要加一个比内存大一点的swap分区(我个人一般不加)
- 固态机械硬盘混用建议固态给根分区和/usr分区,swap和其他数据分区都用机械硬盘(swap分区一般都用不到,用到了不管什么硬盘一定会很卡)
- 双系统、单硬盘或硬盘性能差距大的话不建议上lvm,管理麻烦且性能不稳定
- 文件系统想追求稳定就还是用ext4,如果想试试更多功能可以把/home分区做成btrfs,其他文件系统在这个级别还不推荐。
- 不建议上RAID,会拉低性能
- 内存少于4G(包括)建议在固态硬盘分一个4~8G的swap分区,因为桌面环境一般会用到3G,没有swap分区容易OOM
踩坑:使用单独/usr分区时需要修改/etc/mkinitcpio.conf文件,在HOOKS中加入shutdown usr fsck这三个钩子,否则开机内核找不到/usr/bin/init程序系统会起不来。
例:双硬盘linux生产力主机(内存16G)
设备 名称 容量 文件系统 挂载点
/dev/sda 固态硬盘 128G
├─/dev/sda1 ESP 256M fat32 /boot/efi
└─/dev/sda2 linux系统 128G ext4 /
/dev/sdb 机械硬盘 512G
└─/dev/sdb5 linux家目录 512G ext4 /home
第二系统可以在固态或者机械硬盘,两个系统互补影响,
例:主系统(内存32G,有点过度设计)
设备 名称 容量 文件系统 挂载点
/dev/sda 固态硬盘 256G
├─/dev/sda1 ESP 256M fat32 /boot/efi
├─/dev/sda2 linux系统 160G ext4 /
├─/dev/sda3 LVM数据 64G lvm-pv
└─/dev/sda4 交换分区 32G swap <swap>
/dev/sdb 机械硬盘 512G
└─/dev/sdb1 LVM数据 512G lvm-pv
/dev/mapper/lvm-home LVM-LV 576G ext4 /mnt/persistence

虚线代表软链接,实线代表子目录
这是我以前很喜欢用的分区结构,但这种设计刚开始可能还好,等备份的时候就惨了,只能要么全盘备份(超大),要么目录备份(丢失硬盘结构)。这么大的内存交换分区基本用不上,还占了32G固态。
只有很缺硬盘的主机才考虑这种结构。
个人服务器、NAS
给自己家搭linux服务器的人应该更少,测试一般用云服务器就够了。但是如果真的需要家庭服务器做计算或者存储服务,硬盘分区的设计也是必不可少的。
考虑到成本因素,这里默认使用一块固态硬盘+至少一块机械硬盘。
我家里的主机主要是做AI训练和项目测试用的,需要存放大量的训练数据,所以我准备了两块512G的机械硬盘做存储。
服务器对硬盘的需求跟桌面主机还不太一样,建议更多考虑备份、稳定和兼容性,针对不同的需求还需要分类讨论。
| 文件系统 | 特性 | 缺点 | 适用场景 |
|---|---|---|---|
| ext4 | 高兼容性,极稳定,通用 | 功能少,单文件最大16TB | 桌面系统,计算服务器,小型存储 |
| btrfs | 支持功能多 | 稳定性较差 | 桌面系统,工作目录分区 |
| xfs | 高性能处理大文件,高并发IO支持 | 空间碎片,其他功能较少 | 文件类存储,中小型数据库 |
| zfs | 企业级存储,支持功能多 | 资源占用极高 | 超大规模数据存储,个人一般用不上 |
桌面系统一般用ext4就够了,但是服务器可能需要更多的功能。
- 小型服务器根目录还是建议固态硬盘分128G给ext4文件系统
- 需要存储的话建议xfs或ext4+定期手动备份重要文件,工作目录也不建议用RAID和LVM,会有点影响性能
- 多台老主机做存储可以考虑用分布式文件系统(如ceph)
- 较大的纯数据盘可以上RAID,但是不要同时用,会不兼容
- 防止OOM尽量在机械硬盘配一个swap分区,也可以在空的地方配置swap文件(记得把内核参数的swappness设成0,不然可能会随机卡顿)
- btrfs目前不推荐,可能等项目过几年稳定了之后会好点,目前的确不太稳定(我个人电脑上btrfs崩过一次)
- 个人不建议用LVM,管理麻烦备份也麻烦,多次扩展后容易出现分区碎片,结果还是要重新折腾。LVM的thin-pool给个人也没啥用,还浪费空间,最多给虚拟机分分物理硬盘
例:AI训练、推理主机
设备 名称 容量 文件系统 挂载点
/dev/sda 固态硬盘 256G
├─/dev/sda1 ESP 256M fat32 /boot/efi
└─/dev/sda2 linux系统 256G ext4 /
/dev/sdb 机械硬盘 512G
└─/dev/sdb1 工作目录 512G ext4 /home
/dev/sdc 机械硬盘 512G
└─/dev/sdc1 数据盘 512G ext4 /mnt/data
/home/swap.img 交换文件 <8G> swap <swap>

虚线代表软链接,实线代表子目录
AI推理和训练需要大量的训练数据,也会产生很多的权重文件,所以把这些文件单独放到一个数据盘中,其他项目文件和临时文件放到另一个数据盘中,这样有利于备份和节省成本(一个1T的机械硬盘能买3~4块512G的二手盘)。
把swap分区换成swap文件能更灵活的分配硬盘资源,当需要用时在/或/home目录增加swap文件扩充内存,平时把swap文件删掉不占空间。
例:虚拟化主机
设备 名称 容量 文件系统 挂载点
/dev/sda 固态硬盘 256G
├─/dev/sda1 ESP 256M fat32 /boot/efi
├─/dev/sda2 linux系统 224G ext4 /
└─/dev/sda2 交换分区 32G swap <swap>
/dev/sdb 机械硬盘 512G LVM-PV
/dev/sdc 机械硬盘 512G LVM-PV
/dev/mapper/lvm-data 主机存储 256G xfs /mnt/data
/dev/mapper/lvm-pool 虚拟机存储 LVM-thinpool
注:虚拟机硬盘可以从lvm-pool中直接分配,参考PVE
总结
设计硬盘分区和结构时应该考虑现有的条件,不要盲目设计,切记过度设计。不知道大家平时如何设计硬盘分区结构?欢迎在评论区中分享
1270

被折叠的 条评论
为什么被折叠?



