Linux 板


LINE

Hi, 最近成功的将完整的 Manjaro KDE edition 成功装在 ZFS 档案系统上 发现这里关於 ZFS 的讨论很少,於是想分享一下我的安装经验 原文发在 Manjaro 论坛上,有兴趣的也可以去看看 https://t.ly/C141 希望可以多推广 ZFS 在 Linux 上的使用. 教程上写的比我实际的情形来得简单许多. 比如我的 EFI 系统分割是装在软体磁碟阵列上, 教程中略过 RAID 设定的部份 ========正文开始======== # 0. 准备 Live Media 随便找一个支援 ZFS 的版本并下载 ISO 档将其烧录成可开机媒介 (USB, DVD 等) # 1. 开机并进入 Live environment 进入 BIOS/UEFI 将你的可开机媒介启动顺序调前并开机进入 Live 环境 # 2. 准备磁碟分割 我们要将系统碟至少做下列三个分割区: (1) EFI system partition (ESP): 档案系统为 FAT32, 大小至少为 512 MB. 图形介面下记得加入 esp 旗标 (2) SWAP: 档案系统为 linuxswap, 大小依据记忆体及使用需求而异 (3) ZFS: 使用图形介面的话将其保留为未格式化, 然後标签为 Solaris Root 这里推荐使用 gdisk 做磁碟分割以利於设立正确的标签 # 3. 建立 ZFS pool 及 dataset ZFS 档案系统使用虚拟磁碟机的概念, 我们可以将 pool 当作 container, 而 dataset 才是我们用来挂载的档案系统 这里要注意的是要事先规划好系统要使用哪种开机加载器 (GRUB 或 systemd-boot), 这将影响到建立 ZFS pool 的参数 首先以 sudo modprobe zfs 确认 zfs 模组已加载至核心 接着以 ls -lh /dev/disk/by-id 找出我们要用来建立 ZFS 的磁碟分割的 ID 再来使用下列指令来使用该磁碟分割建立 ZFS pool sudo zpool create -f -o ashift=12 \ -O acltype=posixacl \ -O relatime=on \ -O xattr=sa \ -O dnodesize=legacy \ -O normalization=formD \ -O mountpoint=none \ -O canmount=off \ -O devices=off \ -R /mnt \ -O compression=lz4 \ <zfs-pool-name> /dev/disk/by-id/<id-to-partition-partx> 若是你要使用 GRUB 做为开机加载器的话, 使用以下指令 sudo zpool create -d -o ashift=12 \ -o feature@allocation_classes=enabled \ -o feature@async_destroy=enabled \ -o feature@bookmarks=enabled \ -o feature@embedded_data=enabled \ -o feature@empty_bpobj=enabled \ -o feature@enabled_txg=enabled \ -o feature@extensible_dataset=enabled \ -o feature@filesystem_limits=enabled \ -o feature@hole_birth=enabled \ -o feature@large_blocks=enabled \ -o feature@lz4_compress=enabled \ -o feature@project_quota=enabled \ -o feature@resilver_defer=enabled \ -o feature@spacemap_histogram=enabled \ -o feature@spacemap_v2=enabled \ -o feature@userobj_accounting=enabled \ -o feature@zpool_checkpoint=enabled \ <zfs-pool-name> /dev/disk/by-id/<id-to-partition-partx> 则该 ZFS pool 将只支援 GRUB 可使用的功能, 否则到後面执行 grub-install 时会失败 若想使用完整的 ZFS 功能, 推荐使用 systemd-boot 做为开机加载器, 设定上会简单点 接着若有其他的磁碟也想做为 ZFS 使用且该磁碟只有一个磁碟分割区的话, 那在建立 ZFS pool 时直接指定整颗磁碟 (没有-partx) 即可. 接着我们在已建立的 ZFS pool 底下建立 datasets 用来挂载系统 sudo zfs create -o mountpoint=none <zfs-pool-name>/manjaro sudo zfs create -o mountpoint=/ -o canmount=noauto <zfs-pool-name>/manjaro/root datasets 的层级设计很有弹性, 唯一要注意的是要挂载在 / 的 dataset 一定要加入 -o canmount=noauto 在所有的 ZFS pool 及 dataset 都建立好後, 我们要将其先汇出再汇入, 否则之後挂载会有问题 sudo zpool export <zfs-pool-name> sudo zpool import -d /dev/disk/by-id -R /mnt <zfs-pool-name> -N # 4. 挂载档案系统 先挂载做为 / 的 ZFS dataset sudo zfs mount <zfs-pool-name>/<zfs-dataset-for-root> 若有其他 ZFS datasets 也依样画葫芦将其挂载. 接着再挂载其他非 ZFS 的档案系统及 ESP 此时注意若开机加载器使用的是 GRUB, 则将 ESP 挂载於 /mnt/boot/efi 下. 若使用 systemd-boot 的话则直接挂载在 /mnt/boot 底下即可. 接着我们要挂在於 / 的 ZFS pool 设定 bootfs 参数, 这样系统才知道要去哪里找系统 sudo zpool set bootfs=<zfs-pool-name>/<zfs-dataset-for-root> <zfs-pool-name> 然後为每个 ZFS pool 设定 cachefile 的位置 sudo zpool set cachefile=/etc/zfs/zpool.cache <zfs-pool-name> 最後将 zpool.cache 复制到准系统碟底下, 这样开机时才会自动挂载 ZFS datasets sudo mkdir -p /mnt/etc/zfs sudo cp /etc/zfs/zpool.cache /mnt/etc/zfs/zpool.cache 接着准系统的磁碟挂载都准备好在 /mnt 之下了. 以上的准备工作应该适用於各个发行版. 接下来的安装将会以 Manjaro 为主. 其他发行版若有手动安装的方式应该能自行套用 # 5. 使用官方发布的 iso-profile 及 basestrap 指令将完整系统安装到准系统碟 如果不想像 Arch 一样一切从基本系统开始的话, 我们可以用官方发布的 iso-profile 将完整的系统安装起来 首先先取得 iso-profile git clone https://gitlab.manjaro.org/profiles-and-settings/iso-profiles.git ~/iso-profiles 底下有各个版本的 ISO 资料. 比如说我们想安装的是 KDE 版本, 我们就查看 ~/iso-profiles/manjaro/kde 这个目录, 底下应该有如下的档案结构 desktop-overlay live-overlay -> ../../shared/manjaro/live-overlay Packages-Desktop Packages-Live -> ../../shared/Packages-Live Packages-Mhwd -> ../../shared/Packages-Mhwd Packages-Root -> ../../shared/Packages-Root profile.conf 其中最重要的是 Packages-Desktop Packages-Root 这两个档案, 及 desktop-overlay 资料夹 那两个档案中是该 版本所安装的套件, 而 desktop-overlay 里是 Manjaro 为该版本所预设的设定档 需要注意的是 Packages-Root 里面的 KERNEL 套件为核心, 使用者需自行以 linux510 之类的名称来替换 我们接着随便以任何方法将里面的套件整理成清单, 要注意 KERNEL-zfs (linux510-zfs) 及 zfs-utils 这两个套件必须在清单内以提供 ZFS 支持 接着以 basestrap 安装所有清单内的套件 sudo basestrap /mnt <所有所需套件> 安装完之後, 再将 desktop-overlay 里的所有东西复制到 /mnt 底下, 系统就算基本安装完了. 我们还得先做些基本设定以确保系统能正常运作 第一件事是编辑 /etc/fstab 以让系统自动挂载其他非 ZFS 档案系统, 再来是在 initramfs 中加入 ZFS 的支持, 并且安装开机加载器及启动必要的 systemd 服务 在进入 chroot 环境之前, 我们先以 ls -lh /dev/disk/by-uuid 找出其他分割区的 UUID 接着执行 sudo manjaro-chroot /mnt /bin/bash 以 bash 进入 /mnt 的 chroot 环境 接着编辑 /etc/fstab, 内容大概如下 # Static information about the filesystems. # See fstab(5) for details. # <file system> <dir> <type> <options> <dump> <pass> UUID=1A66-24E1 /boot vfat defaults 0 0 UUID=5af3f596-1068-457f-9d64-4db5aa649caa none swap defaults 0 0 UUID=388de0df-1d0b-4f78-b6a7-2888859d3fa1 none swap defaults 0 0 再来我们编辑 /etc/mkinitcpio.conf 档案以对 initramfs 加入 zfs 支持 找到 HOOKS 那行, 并在 keyboard 及 filesystem 之间加入 zfs, 内容大概如下 HOOKS=(base udev autodetect modconf block keyboard zfs filesystems fsck) 接着执行 mkinitcpio -P 以重新建立 initramfs 供开机使用 接着安装开机加载器. 如果使用 GRUB 的话, 执行 grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Manjaro grub-mkconfig -o /boot/grub/grub.cfg 如果使用的是 systemd-boot 的话, 执行 bootctl install 然後建立 /boot/loader/entries/manjaro5.10.conf 的 entry 设定档, 内容大约如下 title Manjaro Linux 5.10 linux /vmlinuz-5.10-x86_64 initrd /amd-ucode.img initrd /intel-ucode.img initrd /initramfs-5.10-x86_64.img options zfs=zroot/manjaro/root rw 此设定档也可以透过安装 systemd-boot-manager 并执行sdboot-manage gen 来自动産生 接着启动必要的 systemd 服务使系统能自动挂载 ZFS datasets systemctl enable zfs.target systemctl enable zfs-import-cache systemctl enable zfs-mount systemctl enable zfs-import.target 接着启动显示管理员 (display manager) 的服务使系统能直接在开机时进入桌面环境 以 KDE 版本为例, 其预设的显示管理员为 SDDM, 因此我们启动 systemctl enable sddm.service 最後, 我们需要在系统産生 hostid 的设定档, 否则系统在关机或重开机的过程中会无法卸载 ZFS 执行 zgenhostid $(hostid) 至此为止, 系统已安装完成且可正常运作. 下一步我们将客制化系统. # 6. 设置系统并新增一般使用者 以下的设置流程应该也适用其他发行版. 我们将设定键盘配置, 系统语言, 时区, 系统时钟, 主机名称, 主机名称设定档, 开启管理员权限, 网路功能, 时间同步功能及 Root 密码 接着上面的流程, 我们还是在 chroot 环境之下 6.1 键盘配置 键盘配置的清单位於 /usr/share/kbd/keymaps 底下. 键盘配置的设定档位於 /etc/vconsole.conf 预设为 US 键盘, 内容为 KEYMAP=us FONT= FONT_MAP= 若想改用其他如德国键盘配置, 将 us 改为 de 即可 6.2 系统语言 编辑 /etc/locale.gen 档案, 将想使用的语言 ( 如 zh-TW.UTF-8) 去掉注解, 然後执行 locale-gen 然後编辑 /etc/locale.conf 档案, 将 LANG 参数设定为指定的语言 6.3 时区 时区列表位於 /usr/share/zoneinfo/ 之下. 如要设定为台湾时区, 我们可将 /usr/share/zoneinfo/Asia/Taipei 符号连结到 /etc/localtime ls -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime 6.4 系统时钟 让系统使用 UTC 加上时区资讯的方式记录时间 hwclock --systohc --utc 6.5 主机名称 设定主机名称 echo 主机名称 > /etc/hostname 6.6 主机名称设定档 编辑 /etc/hosts, 内容大约如下 127.0.0.1 localhost ::1 localhost 127.0.1.1 主机名称.localdomain 主机名称 如果系统使用静态 IP 连接网路的话, 将 127.0.1.1 改成该 IP 即可 6.7 设定管理员权限 此步骤是为了让 wheel 群组的成员有管理员权限 执行 visudo 然後找到 %wheel ALL=(ALL) ALL 的行并移除开头的注解符号 按 ESC+shift+z+z 存档并离开 6.8 开启网路功能 systemctl enable NetworkManager 6.9 开启时间同步功能 systemctl enable systemd-timesyncd 6.10 设定 Root 密码 passwd 6.11 建立一般使用者 useradd -m -G lp,network,power,sys,wheel -s /bin/bash 使用者名称 passwd 使用者名称 若不想让使用者有管理员权限的话, 不要加入 wheel 群组即可 至此我们已完成所有系统设定. 可输入 exit 离开 chroot 环境 # 7 卸载档案系统并汇出 ZFS pool ZFS pool 必须要先汇出, 否则在重开机後挂载将出现问题 首先先卸载非 ZFS 档案系统 (如 /boot) sudo umount 挂载点 再来卸载所有 ZFS datasets sudo zfs unmount -a 最後汇出所有 ZFS pool sudo zpool export <zfs-pool-name> 接着就能重新开机, 系统应当能正常运作并进入桌面环境了. # 设定例行性资料擦洗 例行性资料擦洗 (data scrubbing) 是维持 ZFS pool 良好的秘诀. 使用者可自行建立 systemd 服务与计时器来安排例行性资料擦洗 Arch Linux 及其分支发行版可安装 AUR 套件 systemd-zpool-scrub. 该套件会建立 zpool scrub 的 systemd 服务及计时器, 预设为每周排程 启动计时器的指令为 sudo systemctl enable zpool-scrub@<zfs-pool-name>.timer ========心得======== ZFS 是个先进的档案系统, 有许多优秀的功能能防止资料损毁, 并提供了相当的弹性. 以上的流程主要为 Manjaro, 但在准备磁碟分割及 ZFS dataset 的部份应适用於各发行版. 使用者可在安装系统及客制化的部份根据各发行版自行调整. 希望以上教程能帮助推广 ZFS 在 Linux 上的普及. --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 109.171.229.79 (沙乌地阿拉伯)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1623083242.A.53A.html ※ 编辑: dobedobedo (109.171.229.79 沙乌地阿拉伯), 06/08/2021 00:29:04
1F:推 Jerr: 推 06/08 01:37
※ 编辑: dobedobedo (109.171.229.79 沙乌地阿拉伯), 06/08/2021 02:52:57
2F:推 mihonisizumi: 推 想请问大大觉得zfs btrfs xfs在一般个人使用上有 06/08 18:57
3F:→ mihonisizumi: 什麽主要差异吗 谢谢 06/08 18:58
我看到的资讯是 Btrfs 目前的稳定性还不够 (尤其是在RAID上), 且不支援 native encryption. 有些工具如 btrfs check 还会造成磁碟问题. XFS 的话看到是对大档案的处理速度相当快, 但不适合用於储存很多小档案. ZFS 大概只是因为 licence 问题所有比较没有普及, 但他在功能上应该算得上最先进的. 他在设计时就是 128 位元架构, 所以不用担心未来系统扩充的问题. ※ 编辑: dobedobedo (109.171.229.79 沙乌地阿拉伯), 06/08/2021 22:23:49
4F:推 bamchisu: 推 ZFS 号称究极档案系统 06/08 23:28
5F:推 s9209122222: 所以 EXT4 不好吗? 06/09 00:17
以家用使用者来说 EXT4 没什麽问题. 使用其他档案系统只是为了更优化的效能及其他资料管理的目的. ※ 编辑: dobedobedo (109.171.229.79 沙乌地阿拉伯), 06/09/2021 21:28:02
6F:推 Hurricaneger: 没办法,Oracle家的东西,要用还是会怕怕。 06/11 01:58
7F:→ Adama: 不是有OpenZFS吗 06/11 11:32
8F:→ dobedobedo: Linux 上的 ZFS 是 OpenZFS, 跟 Oracle 无关 06/11 14:33
9F:推 extraymond: 激推zfs,搭lxd做测试环境snapshot回溯都超方便!! 06/11 23:28
10F:推 Adama: zfs回溯lxd snapshot只能回溯最新的那个,更旧的就不行了 06/13 16:33
11F:→ Adama: Feature comparison https://reurl.cc/R0X7Nr 06/13 16:35
12F:→ Adama: btrfs还比zfs多了两个yes 06/13 16:35
13F:推 extraymond: 感谢A大分享,跳板切我都乖乖发布.. btrfs可以自由跳? 06/13 22:12
14F:→ extraymond: 如果只是要切版用copy+rename也可以,这样就不用一个 06/13 22:13
15F:→ extraymond: 一个回溯 06/13 22:14
16F:推 extraymond: 看到文件了!改天来玩玩看,再次感谢A大推荐 06/13 22:41
17F:推 zwin: 要用zfs的话直上BSD吧 06/15 14:03
18F:→ dobedobedo: 很多 Linux 上的桌面软体 BSD 不支援唷 06/15 15:56
19F:推 holishing: 哪个BSD www 06/16 05:24
20F:→ holishing: 很多 Windows 上的桌面软体 Linux 也不支援唷 06/16 05:26
21F:→ dobedobedo: 我以为一般讲的 BSD 是指 FreeBSD XD 06/16 13:44







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP