根池相关
配置ZFS根池的需求
ZFS是Oracle Solaris的默认根文件系统。根池包含引导环境(BE,boot environment)并在安装期间自动创建。
ZFS根池的空间要求
交换存储卷的大小取决于物理内存量。可引导ZFS根文件系统的最小池空间量取决于物理内存量、可用磁盘空间以及要创建的BE数量。
建议7到13GB最小磁盘空间,消耗如下:
- 交换区和转储设备
安装程序创建的交换和转储卷的默认大小因变量而异(例如系统内存量)。转储设备大小大约是物理内存大小的一半或更大,具体取决于系统的活动。
安装期间或安装完成之后可以调整交换和转储卷的大小,但新尺寸必须支持系统操作。
- 引导环境
ZFS BE大约为4-6GB。从另一个ZFS BE克隆的每个ZFS BE不需要额外的磁盘空间。BE大小会在更新时增加,具体取决于更新。
同一根池中的所有ZFS BE使用相同的交换和转储设备。
- Oracle Solaris组件
根文件系统的所有子目录(除/var属于操作系统映像的一部分)都必须在根文件系统中。除交换和转储设备之外的所有Oracle Solaris组件都必须驻留在根池中。
ZFS根池配置建议
应遵从以下准则:
- 如果使用带有EFI(GPT)标签的磁盘,应在镜像的整个磁盘上创建根池。如果使用SMI(VTOC)标记的磁盘,应在镜像slic上创建根池。
大多数情况下,具有GPT感知固件的x86系统和SPARC系统具有标记位EFI(GPT)的磁盘。
- 不要重命名初始安装后创建的根池,这样系统可能无法启动。
此外,作为最佳实践,不要更改根池的任何默认设置,例如挂载点。否则引导环境的后续操作中可能会出现错误。
- 不要将精简配置的VMware设备设备用于根池设备。
根池具有以下限制:
- 根池不支持RAID-Z或条带
- 根池不能有单独的日志设备
- 不能再根池上配置多个顶级虚拟设备,但可以通过附加其他设备来扩展根池
- 根池不支持gzip和LZ4压缩算法
安装根池
Oracle Solaris安装过程会将系统自动安装到一个独立硬盘的ZFS根池。安装过程还会配置根池上的ZFS卷作为缓存和转储。
注意,从Oracle Solaris 11.4 SRU 36开始,compression属性默认设置位on。此属性可以减少根池中的空间消耗并可能提高系统性能。
完整安装Oracle Solaris后,执行以下操作:
- 如果安装过程在单个磁盘上创建了根池,应手动将池转换位镜像配置。
- 在ZFS根文件系统上设置配额以放置根文件系统填满。
目前没有保留ZFS根池空间作为完整文件系统的安全网。
例如,在一个68GB容量的根池磁盘上,建议在ZFS根文件系统(rpool/ROOT/solaris)上设置67GB配额以允许1GB的剩余文件系统空间。
- 使用Oracle Solaris归档使用程序为灾难恢复或迁移目的创建根池恢复文档。
例18 修改AI清单以自定义根池安装
此例显示如何自定义AI清单以执行以下操作:
- 创建一个由c1t0d0和c2t0d0组成的镜像根池
- 启用根池的listsnaps属性
<target>
<disk whole_disk="true" in_zpool="rpool" in_vdev="mirrored">
<disk_name name="c1t0d0" name_type="ctd"/>
</disk>
<disk whole_disk="true" in_zpool="rpool" in_vdev="mirrored">
<disk_name name="c2t0d0" name_type="ctd"/>
</disk>
<logical>
<zpool name="rpool" is_root="true">
<vdev name="mirrored" redundancy="mirror"/>
<!--
...
-->
<filesystem name="export" mountpoint="/export"/>
<filesystem name="export/home"/>
<pool_options>
<option name="listsnaps" value="on"/>
</pool_options>
<be name="solaris"/>
</zpool>
</logical>
</target>
例19 简单根池配置
以下例子显示一个定制清单AI安装镜像的根池和文件系统配置:
$ zpool status rpool
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c8t0d0 ONLINE 0 0 0
c8t1d0 ONLINE 0 0 0
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 11.8G 55.1G 4.58M /rpool
rpool/ROOT 3.57G 55.1G 31K legacy
rpool/ROOT/solaris 3.57G 55.1G 3.40G /
rpool/ROOT/solaris/var 165M 55.1G 163M /var
rpool/VARSHARE 42.5K 55.1G 42.5K /var/share
rpool/dump 6.19G 55.3G 6.00G -
rpool/export 63K 55.1G 32K /export
rpool/export/home 31K 55.1G 31K /export/home
rpool/swap 2.06G 55.2G 2.00G -
top
管理ZFS根池
如何配置一个镜像根池(SPARC or x86/EFI(GPT))
这个过程描述了如何将默认根池安装转换为冗余配置。此过程适用于大多数x86系统和具有GPT感知固件的SPARC系统,其磁盘具有EFI(GPT)标签。
- (可选项)显示现有的根池状态
$ zpool status root-pool
- 附加第二块硬盘以配置镜像根池
$ zpool attach root-pool current-disk new-disk
系统会自动应用正确的磁盘标签和引导块。
- 查看根池状态以确认重新同步已完成
如果重新同步已完成,输出将包含类似以下内容的消息:
scan: resilvered 11.6G in 0h5m with 0 errors on Fri Jul 20 13:57:25 2014
- 如果新硬盘比现有硬盘大,启用ZFS的autoexpand属性
$ zpool set autoexpand=on root-pool
以下示例显示了启用autoexpand属性后rpool磁盘空间的差异:
$ zpool list rpool
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 29.8G 152K 29.7G 0% 1.00x ONLINE -
$ zpool set autoexpand=on rpool
$ zpool list rpool
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 279G 146K 279G 0% 1.00x ONLINE -
- 确认可以从新硬盘正常启动
如何配置一个镜像池(SPARC or x86/VTOC)
这个过程描述了如何将默认根池安装转换为冗余配置,此过程适用于某些没有GPT感知固件的x86系统和SPARC系统,其磁盘具有SMI(VTOC)标签。
开始之前
准备第二个磁盘连接到根池,如下所示:
- SPARC
确认磁盘具有SMI(VOTC)磁盘标签,并且slice0包含大部分磁盘空间。
- x86
确认该磁盘有fdisk分区、SMI磁盘标签和slice0。
- (可选)显示当前根池状态
$ zpool status rpool
pool: rpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c2t0d0s0 ONLINE 0 0 0
errors: No known data errors
- 附加第二块磁盘配置镜像根池
$ zpool attach root-pool current-disk new-disk
- 查看根池状态确认同步成功
scan: resilvered 11.6G in 0h5m with 0 errors on Fri Jul 20 13:57:25 2014
- 如果新硬盘比现有硬盘大,启用ZFS的autoexpand属性
$ zpool set autoexpand=on root-pool
以下示例显示了启用autoexpand属性后rpool磁盘空间的差异:
$ zpool list rpool
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 29.8G 152K 29.7G 0% 1.00x ONLINE -
$ zpool set autoexpand=on rpool
$ zpool list rpool
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 279G 146K 279G 0% 1.00x ONLINE -
- 确认可以从新硬盘正常启动
如何更新ZFS启动环境
默认情况下,ZFS BE名为solaris。pkg update命令通过创建并自动激活新的BE来更新ZFS,前提是当前和更新的BE之间存在显著差异。
- (可选)显示当前的启动环境配置
$ beadm list
BE Active Mountpoint Space Policy Created
-- ------ ---------- ----- ------ -------
solaris NR / 3.82G static 2012-07-19 13:44
以上Active栏显示N表示BE处于活动状态,R表示它在系统重新启动后便会活动状态,NR有时会同时显示。
- 更新ZFS BE
$ pkg update
.
DOWNLOAD PKGS FILES XFER (MB)
Completed 707/707 10529/10529 194.9/194.9
.
新的BE会自动创建,并被命名为solaris-110>。
- 重启系统然后查看BE状态
$ init 6
.
.
$ beadm list
BE Active Mountpoint Space Policy Created
-- ------ ---------- ----- ------ -------
solaris - - 46.95M static 2014-07-20 10:25
solaris-1 NR / 3.82G static 2014-07-19 14:45
- 如果适用新BE启动发生错误,激活并启动到旧的BE
$ beadm activate solaris
$ init 6
也可以使用beadm activate BE命令激活以前备份过可正常启动的BE。
如何挂载备用BE
- 成为管理员
- 挂载备用BE
$ beadm mount alt-BE /mnt
- 访问BE
$ ls /mnt
- 完成后卸载备用BE
$ beadm umount alt-BE
替换ZFS根池中的磁盘
出于以下原因可能需要更换根池的磁盘:
- 根池太小需要更换大的磁盘
- 根池磁盘失效
对于没有冗余的池,如果磁盘失效系统不能启动,可从其他设备启动,例如CD或网络,然后再更换根池磁盘。
有两种方法可以完成更换磁盘的工作:
- 使用zpool replace命令
这种方法涉及清理和擦洗脏时间日志(DTL:dirty time logs),然后更换磁盘。安装新磁盘后可以手动应用引导块。
- 使用zpool detach|attach命令
此方法包括连接新磁盘并验证它是否正常工作,然后分离有故障的磁盘。
如何更换ZFS根池中的磁盘
以下过程使用zpool detach|attach命令替换磁盘
- 物理连接替换磁盘
- 将新磁盘附加到根池
$ zpool attach root-pool current-disk new-disk
在此过程结束时,current-disk变为要分离的old-disk。
正确的磁盘标签和引导块会自动应用。
- 查看根池状态以确认重新同步已完成
如果重新同步已完成,输出将包含类似以下内容的消息:
scan: resilvered 11.6G in 0h5m with 0 errors on Fri Jul 20 13:57:25 2014
- 核查是否可以从新盘启动
- 成功启动后,卸掉久磁盘
$ zpool detach root-pool old-disk
- 如果新磁盘比现有的磁盘大,应启用ZFS的autoexpand属性
$ zpool set autoexpend=on root-pool
- 设置系统从新硬盘启动
- 如果一切顺利,可以物理取下旧磁盘
例20 更换ZFS根池磁盘
此例使用zpool attach|detach命令更换根池rpool中的磁盘c2t0d0,新硬盘c2t1d0已经物理连接到系统。
$ zpool attach rpool c2t0d0 c2t1d0
Make sure to wait until resilver is done before rebooting.
$ zpool status rpool
pool: rpool
state: ONLINE
scan: resilvered 11.7G in 0h5m with 0 errors on Fri Jul 20 13:45:37 2012
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c2t0d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
errors: No known data errors
在重启测试新硬盘可以正常工作后,要卸下旧硬盘:
$ zpool detach rpool c2t0d0
$ zpool list rpool
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 29.8G 152K 29.7G 0% 1.00x ONLINE -
$ zpool set autoexpand=on rpool
$ zpool list rpool
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 279G 146K 279G 0% 1.00x ONLINE -
例21 更换根池中的SATA硬盘
此例使用zpool replace命令更换c1t0d0。
带有SATA磁盘的系统要求在使用zpool replace命令替换故障磁盘之前,应先时磁盘脱机并取消配置。最佳的做法是在更换磁盘之前先清理并清除根池。
假设要替换系统上的c1t0d0,执行:
$ zpool scrub rpool
$ zpool clear rpool
$ zpool offline rpool c1t0d0
$ cfgadm -c unconfigure c1::dsk/c1t0d0
这时候,可以物理移除旧磁盘c1t0d0,插入新磁盘到相同的接口。新磁盘依然是c1t0d0。在同一套系统中,不需要是磁盘上线或配置。
$ cfgadm -c configure c1::dsk/c1t0d0
$ zpool online rpool c1t0d0
$ zpool replace rpool c1t0d0
$ zpool status rpool
同步完成后,需要安装启动块:
$ bootadm install-bootloader
后面两个例子是针对VTOC,不罗列了。
top
管理ZFS缓存和转储设备
安装过程中会在ZFS根池中的ZFS卷上自动创建交换区和转储设备。
当保存故障转储的目录空间不足,或者运行了dumpadm -n命令是,将使用转储设备。-n选项修改转储配置系统重启后savecore无法自动运行。
某些系统利用当前发行版中的延迟转储功能,借此功能,系统会在重启时将系统转储保存在内存中,以便重启后分析故障。
管理交换和转储卷时应遵循以下准则:
- Solaris安装期间,会在根池中自动创建转储设备。
这是转储和交换设备的推荐位置。如果根池对于转储设备来说太小,则可以将其重新定位到非根池。
非根池必须时单磁盘池、镜像池或条带池。
RAIDZ池不支持转储设备。
- 必须为交换区和转储设备使用单独的ZFS卷
- 交换卷不支持稀疏卷(sparse volumes)
- 目前不支持在ZFS文件系统上使用交换文件
查看缓存和转储信息
使用命令swap -l可以查看缓存信息:
$ swap -l
swapfile dev swaplo blocks free
/dev/zvol/dsk/rpool/swap 145,2 16 16646128 16646128
使用命令dumpadm可以查看转储信息:
$ dumpadm
Dump content: kernel pages
Dump device: /dev/zvol/dsk/rpool/dump (dedicated)
Savecore directory: /var/crash/
Savecore enabled: yes
Save compressed: on
可以在非根池手动创建缓存或转储卷。在非根池手动创建转储设备后,必须运行dump -d命令充值它。例如:
$ zfs create -V 10g bpool/dump2
$ dumpadm -d /dev/zvol/dsk/bpool/dump2
Dump content : kernel with ZFS metadata
Dump device : /dev/zvol/dsk/bpool/dump2 (dedicated)
Savecore directory: /var/crash
Savecore enabled : yes
Save compressed : on
如何创建缓存卷
这个操作允许在根池和非根池进行。如果需要跟多的缓存但是现有缓存设备一直在使用中,可以添加其他缓存卷。
- 创建缓存卷
$ zfs create -V size new-pool/swap
- 使用文本编辑器,修改/etc/vfstab加入新的缓存设备
- 如果想从现有的活动交换卷切换到新的缓存卷,应激活新的缓存卷
$ swap -a path-to-new-swap-volume
- 如有必要,请重启系统
例24:手动创建缓存卷
本例在rpool池中创建一个新的4GB缓存卷。新缓存卷替换掉旧缓存卷:
$ zfs create -V 4g rpool2/swap2
$ vi /etc/vfstab
/dev/zvol/dsk/rpool2/swap - - swap - no -vfstab entry
$ swap -a /dev/zvol/dsk/rpool/swap2
如何创建转储卷
这个操作允许在根池和非根池进行。
- 创建转储卷
$ zfs create -V size new-pool/dump
- 重置转储设备
$ dumpadm -d dump-path
- 如有必要,请重启系统
例25:手动创建转储卷
$ zfs create -V 4g rpool2/dump
$ dumpadm -d /dev/zvol/dsk/rpool2/dump
调整ZFS交换和转储设备的大小
默认情况下,当为交换大小指定n个块时,会自动跳过交换文件的第一页。因此实际分配的大小是n-1个块。
例26:重置转储设备volsize属性
$ zfs set volsize=2G rpool/dump
$ zfs get volsize rpool/dump
NAME PROPERTY VALUE SOURCE
rpool/dump volsize 2G -
例27:重设缓存卷的大小
$ swap -l
swapfile dev swaplo blocks free
/dev/zvol/dsk/rpool/swap 303,1 8 2097144 2097144
$ zfs get volsize rpool/swap
NAME PROPERTY VALUE SOURCE
rpool/swap volsize 1G local
$ zfs set volsize=2g rpool/swap
$ swap -l
swapfile dev swaplo blocks free
/dev/zvol/dsk/rpool/swap 303,1 8 2097144 2097144
/dev/zvol/dsk/rpool/swap 303,1 2097160 2097144 2097144
将会暂时看到两个交换条目,但可以访问扩展的交换空间。
对ZFS转储设备问题进行故障排除
top
从ZFS根池启动
基于SPARC和基于x86的系统都可以使用引导归档文件进行引导。引导归档文件时包含引导所需文件的文件系统映像。
选择用于引导的根文件系统包含引导存档和内核文件的路径名。
在ZFS引导的情况下,设备说明符标识存储池,而不是单个根文件系统。一个存储池可以包含多个可引导的ZFS根文件系统。因此,必须在由引导设备标识的池中指定引导设备和根文件系统。
默认情况下,ZFS引导进程使用在池的bootfs属性中定义的文件系统。但是可以覆盖默认文件系统:
· 在SPARC系统上,使用boot -Z命令并指定备用的可引导文件系统。
· 在x86系统是,可以从BIOS中选择备用引导设备。
如果使用zpool replace命令替换根池磁盘,则必须在替换磁盘上安装引导信息。
但如果知识附加磁盘到根池,则不需要安装引导信息。
要安装引导信息,可以通过以下方式之一:
- 要在现有根池的磁盘上安装引导信息
$ bootadm install bootloader
- 要在备用池上安装引导信息
$ bootadm install-bootloader -P alt-root-pool
从备用根池启动
SPARC系统不讲,x86系统上如果主根池磁盘分离、脱机或不可用,系统会自动从第二个设备引导。只需要确认系统中有哪个活动的引导设备,如下所示:
$ prtconf -v|sed -n '/bootpath/,/value/p'
name='bootpath' type=string items=1
value='/pci@0,0/pci8086,25f8@4/pci108e,286@0/disk@0,0:a'
后面还有,但似乎没什么用,略过
top
2021/12/15&16