根池相关

  1. 配置ZFS根池的需求
  2. 管理ZFS根池
  3. 管理ZFS缓存和转储设备
  4. 从ZFS根池启动

配置ZFS根池的需求

ZFS是Oracle Solaris的默认根文件系统。根池包含引导环境(BE,boot environment)并在安装期间自动创建。
ZFS根池的空间要求
交换存储卷的大小取决于物理内存量。可引导ZFS根文件系统的最小池空间量取决于物理内存量、可用磁盘空间以及要创建的BE数量。
建议7到13GB最小磁盘空间,消耗如下:
ZFS根池配置建议
应遵从以下准则: 根池具有以下限制:
安装根池
Oracle Solaris安装过程会将系统自动安装到一个独立硬盘的ZFS根池。安装过程还会配置根池上的ZFS卷作为缓存和转储。
注意,从Oracle Solaris 11.4 SRU 36开始,compression属性默认设置位on。此属性可以减少根池中的空间消耗并可能提高系统性能。
完整安装Oracle Solaris后,执行以下操作: 例18 修改AI清单以自定义根池安装
此例显示如何自定义AI清单以执行以下操作:
<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)标签。
  1. (可选项)显示现有的根池状态
  2. $ zpool status root-pool
  3. 附加第二块硬盘以配置镜像根池
  4. $ zpool attach root-pool current-disk new-disk
    系统会自动应用正确的磁盘标签和引导块。
  5. 查看根池状态以确认重新同步已完成
  6. 如果重新同步已完成,输出将包含类似以下内容的消息:
    scan: resilvered 11.6G in 0h5m with 0 errors on Fri Jul 20 13:57:25 2014
  7. 如果新硬盘比现有硬盘大,启用ZFS的autoexpand属性
  8. $ 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  -
    			
  9. 确认可以从新硬盘正常启动

如何配置一个镜像池(SPARC or x86/VTOC)
这个过程描述了如何将默认根池安装转换为冗余配置,此过程适用于某些没有GPT感知固件的x86系统和SPARC系统,其磁盘具有SMI(VTOC)标签。
开始之前
准备第二个磁盘连接到根池,如下所示:
  1. (可选)显示当前根池状态
  2. $ 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
    			
  3. 附加第二块磁盘配置镜像根池
  4. $ zpool attach root-pool current-disk new-disk
  5. 查看根池状态确认同步成功
  6. scan: resilvered 11.6G in 0h5m with 0 errors on Fri Jul 20 13:57:25 2014
  7. 如果新硬盘比现有硬盘大,启用ZFS的autoexpand属性
  8. $ 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  -			
    			
  9. 确认可以从新硬盘正常启动

如何更新ZFS启动环境
默认情况下,ZFS BE名为solarispkg update命令通过创建并自动激活新的BE来更新ZFS,前提是当前和更新的BE之间存在显著差异。
  1. (可选)显示当前的启动环境配置
  2. $ beadm list
    BE       Active  Mountpoint  Space  Policy  Created
    --       ------  ----------  -----  ------  -------
    solaris  NR      /           3.82G  static  2012-07-19 13:44			
    			
    以上Active栏显示N表示BE处于活动状态,R表示它在系统重新启动后便会活动状态,NR有时会同时显示。
  3. 更新ZFS BE
  4. $ pkg update
    .
    DOWNLOAD                                  PKGS       FILES    XFER (MB)
    Completed                              707/707 10529/10529  194.9/194.9
    .
    			
    新的BE会自动创建,并被命名为solaris-1
  5. 重启系统然后查看BE状态
  6. $ 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 			
    			
  7. 如果适用新BE启动发生错误,激活并启动到旧的BE
  8. $ beadm activate solaris
    $ init 6			
    			
    也可以使用beadm activate BE命令激活以前备份过可正常启动的BE。

如何挂载备用BE
  1. 成为管理员
  2. 挂载备用BE
  3. $ beadm mount alt-BE /mnt
  4. 访问BE
  5. $ ls /mnt
  6. 完成后卸载备用BE
  7. $ beadm umount alt-BE

替换ZFS根池中的磁盘
出于以下原因可能需要更换根池的磁盘: 有两种方法可以完成更换磁盘的工作:
如何更换ZFS根池中的磁盘
以下过程使用zpool detach|attach命令替换磁盘
  1. 物理连接替换磁盘
  2. 将新磁盘附加到根池
  3. $ zpool attach root-pool current-disk new-disk
    在此过程结束时,current-disk变为要分离的old-disk
    正确的磁盘标签和引导块会自动应用。
  4. 查看根池状态以确认重新同步已完成
  5. 如果重新同步已完成,输出将包含类似以下内容的消息:
    scan: resilvered 11.6G in 0h5m with 0 errors on Fri Jul 20 13:57:25 2014
  6. 核查是否可以从新盘启动
  7. 成功启动后,卸掉久磁盘
  8. $ zpool detach root-pool old-disk
  9. 如果新磁盘比现有的磁盘大,应启用ZFS的autoexpand属性
  10. $ zpool set autoexpend=on root-pool
  11. 设置系统从新硬盘启动
  12. 如果一切顺利,可以物理取下旧磁盘
例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无法自动运行。
某些系统利用当前发行版中的延迟转储功能,借此功能,系统会在重启时将系统转储保存在内存中,以便重启后分析故障。
管理交换和转储卷时应遵循以下准则:
查看缓存和转储信息
使用命令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		
		
如何创建缓存卷
这个操作允许在根池和非根池进行。如果需要跟多的缓存但是现有缓存设备一直在使用中,可以添加其他缓存卷。
  1. 创建缓存卷
  2. $ zfs create -V size new-pool/swap
  3. 使用文本编辑器,修改/etc/vfstab加入新的缓存设备
  4. 如果想从现有的活动交换卷切换到新的缓存卷,应激活新的缓存卷
  5. $ swap -a path-to-new-swap-volume
  6. 如有必要,请重启系统
例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		
		
如何创建转储卷
这个操作允许在根池和非根池进行。
  1. 创建转储卷
  2. $ zfs create -V size new-pool/dump
  3. 重置转储设备
  4. $ dumpadm -d dump-path
  5. 如有必要,请重启系统
例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命令替换根池磁盘,则必须在替换磁盘上安装引导信息。
但如果知识附加磁盘到根池,则不需要安装引导信息。

要安装引导信息,可以通过以下方式之一:
从备用根池启动
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