Bomi
分类: 系统运维
2012-02-05 00:29:23
如何已启动的系统中,查找并修改安装在其他设备上的 ZFS 根系统内容?
(1) 一个最简单的方式就是进入 failsafe 模式,failsafe 可以自动查找系统中的所有设备,列出可能的根文件系统所在设备(无论 UFS/ZFS),询问是否将其挂载在 /a 目录下
SunOS Release 5.11 Version snv_97 32-bit
Copyright 1983-2008 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
Booting to milestone "milestone/single-user:default".
Configuring /dev
Searching for installed OS instances...
ROOT/snv_97 was found on rpool.
Do you wish to have it mounted read-write on /a? [y,n,?] y
mounting rpool on /a
Starting shell.
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
rpool 68G 6.02G 62.0G 8% ONLINE /a
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 6.32G 60.6G 36.5K /a/rpool
rpool/ROOT 5.32G 60.6G 18K legacy
rpool/ROOT/snv_97 5.32G 60.6G 5.32G /a
rpool/dump 512M 60.6G 512M -
rpool/export 37K 60.6G 19K /a/export
rpool/export/home 18K 60.6G 18K /a/export/home
rpool/swap 512M 60.9G 210M -
这样进入 /a ,就可以根据需要修改该 ZFS 文件系统中的内容了。
(2)如果你的系统没有 failsafe 模式,另一种方式是手工 import ,这种方式不需要进入 failsafe 模式,但改动前后需要对 ZFS 根文件系统的结构知识有一定了解:
# zpool import (列出所有可待选的存储池)
pool: rpool
id: 7154650442157903689
state: ONLINE
status: The pool is formatted using an older on-disk version.
action: The pool can be imported using its name or numeric identifier, though
some features will not be available without an explicit 'zpool upgrade'.
config:
rpool ONLINE
c0t1d0s0 ONLINE
# zpool import -f -R /mnt rpool
这里需要讲一下为什么要用这些选项:
-f 是强制导入,因为该存储池在之前可能曾被活跃系统使用,-f 可以忽略与此相关的警告错误;
-R /mnt 或其他替换的根路径,这是避免该存储池中的
import 操作成功之后,执行 zfs mount 命令可查看已挂载的文件系统,这时候你可能会注意到,该存储池中有些文件系统可能没有自动挂载,比如查看结果如下
# zfs mount
rpool/export /mnt/export
rpool/export/home /mnt/export/home
rpool /mnt/rpool
rpool/ROOT/snv_97 就没有挂载上,这是因为该文件系统曾是存储池中的根文件系统,这种文件系统必须手动挂载,步骤如下:
# zfs unmount -a
# rm -rf /mnt/*
# zfs mount rpool/ROOT/snv_97
# zfs mount -a
这样进入 /mnt 目录,就可以编辑原存储池根文件系统下的内容了。
修改完毕之后,如果不希望在将来的系统中看到这个存储池,仍然可以用 zpool export rpool 将其导出,这样与此相关的设备可以拔除到其他系统使用。