论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

总结

设计硬盘分区和结构时应该考虑现有的条件,不要盲目设计,切记过度设计。不知道大家平时如何设计硬盘分区结构?欢迎在评论区中分享

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Maxwellu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值