某些时候,由于空间不足或是硬件故障等原因,我们需要更换启动磁盘。
冗余池(mirrored pool)
在一个镜像池里面更远硬盘相对简单一些,只需要用replace命令直接更换硬盘即可。
- # zpool offline rpool c1t0d0s0
- # cfgadm –c unconfigure c1::dsk/c1t0d0
- <Physically remove failed disk c1t0d0>
- <Physically insert replacement disk c1t0d0>
- # cfgadm –c configure c1::dsk/c1t0d0
- # zpool replace rpool c1t0d0s0
- # zpool online rpool c1t0d0s0
- # zpool status rpool
- <Let disk resilver before installing the boot blocks>
- SPARC# installboot –F zfs /usr/platform/`uname –i`/lib/fs/zfs/bootblk /dev/rdsk/c1t0d0s0
- x86# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0
非冗余池
如果根池不是mirrored,那么就需要先把新磁盘分区好,加入根池形成mirrored类型的池。
加入新盘并检测
# devfsadm
分区并打标签
- # format –e c8t1d0
- format> partition
- SELECT ONE OF THE FOLLOWING:
- 1. Create a partition
- ...
- partition> print
- Current partition table (original):
- Total disk cylinders available: 30398 + 2 (reserved cylinders)
- Part Tag Flag Cylinders Size Blocks
- 0 root wm 1 – 30396 232.85GB (30396/0/0) 488311740
- 1 unassigned wu 0 0 (0/0/0) 0
- 2 backup wu 0 – 30396 232.85GB (30397/0/0) 488327805
- 3 unassigned wu 0 0 (0/0/0) 0
- 4 unassigned wu 0 0 (0/0/0) 0
- 5 unassigned wu 0 0 (0/0/0) 0
- 6 unassigned wu 0 0 (0/0/0) 0
- 7 unassigned wu 0 0 (0/0/0) 0
- 8 boot wu 0 – 0 7.84MB (1/0/0) 16065
- 9 unassigned wu 0 0 (0/0/0) 0
- partition>quit
- format> label
- [0] SMI Label
- [1] EFI Label
- Specify Label type[0]: 0
- Ready to label disk, continue? y
添加磁盘
现在把做好的新磁盘分区加入根池形成镜像池,这一步里数据的同步可能会花费比较长的时间
- # zpool attach rpool c0d0s0 c0d2s0
- Make sure to wait until resilver is done before rebooting.
- # zpool status
- pool: rpool
- state: ONLINE
- status: One or more devices is currently being resilvered. The pool will
- continue to function, possibly in a degraded state.
- action: Wait for the resilver to complete.
- scan: resilver in progress since Wed Jul 24 15:39:51 2013
- 302M scanned out of 7.47G at 11.2M/s, 0h10m to go
- 269M resilvered, 3.95% done
- config:
- NAME STATE READ WRITE CKSUM
- rpool ONLINE 0 0 0
- mirror–0 ONLINE 0 0 0
- c0d0s0 ONLINE 0 0 0
- c0d2s0 ONLINE 0 0 0 (resilvering)
- errors: No known data errors
安装启动块
On a SPARC based system:
# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t9d0s0
On an x86 based system:
# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0
验证boot
首先查看boot path
- # prtconf –vp|grep –i bootpath
- bootpath: ‘/virtual-devices@100/channel-devices@200/disk@0:a’
可以推断出新盘path的末尾是disk@2:a,然后启动
- {0} ok setenv boot-device /virtual-devices@100/channel-devices@200/disk@2:a
boot-device = /virtual-devices@100/channel-devices@200/disk@2:a
{0} ok printenv boot-device
boot-device = /virtual-devices@100/channel-devices@200/disk@2:a
- ok boot /virtual–devices@100/channel–devices@200/disk@2:a
移除老磁盘
- # zpool detach rpool c0d0s0
扩展池空间
由于之前的磁盘空间小于新盘,所以现在的空间是和之前一样的,需要扩展一下。
- # zpool set autoexpand=on rpool
至此为止,大功告成。