Ubuntu 22.04.3安装时自定义ZFS存储布局(SSD Mirror+RAIDZ1 HDD)的方法咨询
兄弟我太懂你的痛点了!Ubuntu 22.04的默认安装器对ZFS的支持真的相当阉割——那个“用ZFS安装”的选项完全是傻瓜式的,根本没法自定义镜像、RAIDZ这些结构,更别说指定不同挂载点了。其实咱们可以绕开这个限制,用live环境提前搭好ZFS的池和数据集,再让安装器“捡现成”,具体操作步骤如下:
第一步:进入Live环境并打开终端
启动Ubuntu安装介质后,先别急着点“安装Ubuntu”,直接按Ctrl+Alt+T打开终端,咱们要用命令行手动搭建ZFS结构。第二步:清空目标磁盘的分区表
假设你的两块SSD是/dev/sda、/dev/sdb,四块HDD是/dev/sdc到/dev/sdf,先把这些磁盘的原有数据和分区表彻底清除(一定要确认磁盘路径,别误删重要数据!):sudo wipefs -a /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf第三步:创建SSD镜像池(系统分区用)
用两块SSD创建一个镜像vdev的ZFS池,命名为sys(名字可以自己改),同时开启压缩、关闭atime来优化性能,适配4K扇区:sudo zpool create -f -o ashift=12 -O compression=lz4 -O atime=off sys mirror /dev/sda /dev/sdb解释下关键参数:
ashift=12:适配现代磁盘的4K扇区,避免性能损失compression=lz4:开启轻量高速度的压缩,不影响性能还能省空间atime=off:关闭文件访问时间记录,提升磁盘IO性能
第四步:给系统池创建对应数据集
针对/、/boot、/var这些系统分区创建独立的数据集,方便后续管理:sudo zfs create sys/root sudo zfs create sys/boot sudo zfs create sys/var sudo zfs create sys/tmp_home # 先建临时home,安装完成后再迁到HDD池第五步:创建HDD的RAIDZ1池(大存储用)
用四块HDD创建RAIDZ1池,命名为data,同样配置性能优化参数:sudo zpool create -f -o ashift=12 -O compression=lz4 -O atime=off data raidz1 /dev/sdc /dev/sdd /dev/sde /dev/sdf第六步:给存储池创建业务数据集
按需创建/home、/data对应的数据集:sudo zfs create data/home sudo zfs create data/data第七步:启动安装器并指定挂载点
现在打开“安装Ubuntu”,一路走到“安装类型”步骤,选择其他选项(手动分区),然后找到咱们刚才创建的ZFS数据集:- 选中
sys/root,设置挂载点为/,勾选“格式化”(其实ZFS已经格式化好了,这里只是确认挂载) - 选中
sys/boot,设置挂载点为/boot - 选中
sys/var,设置挂载点为/var - 选中
sys/tmp_home,设置挂载点为/home
完成后继续安装流程即可。
- 选中
第八步:安装完成后迁移Home到HDD池
重启进入新系统后,把临时home的内容迁移到HDD池的数据集,然后替换挂载点:# 完整复制home目录内容,保留权限和属性 sudo rsync -avx /home/ /data/home/ # 卸载临时home sudo umount /home # 把data/home的挂载点设为系统默认的/home sudo zfs set mountpoint=/home data/home # 验证挂载是否成功 df -h /home确认没问题后,可以删掉临时的系统home数据集:
sudo zfs destroy sys/tmp_home
额外注意事项
- 务必反复确认磁盘路径,
/dev/sdX的顺序可能会变,也可以用lsblk命令查看磁盘的UUID或型号来精准定位 - 如果你的SSD是NVMe盘,路径会是
/dev/nvme0n1、/dev/nvme1n1这类,替换对应路径即可 - 安装前一定要备份所有重要数据,
wipefs和ZFS创建池的操作会彻底清除磁盘内容
备注:内容来源于stack exchange,提问作者st01

