差分
このページの2つのバージョン間の差分を表示します。
freebsd:freebsd_9.2r_migrate_hdd_to_ssd [2015-04-03 07:56] |
freebsd:freebsd_9.2r_migrate_hdd_to_ssd [2020-12-03 19:36] (現在) Decomo Deleted by PageMove plugin |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== FreeBSD 9.2RをHDDからSSDに移動する ====== | ||
+ | |||
+ | ===== 前書き ===== | ||
+ | |||
+ | slog/ | ||
+ | |||
+ | ===== 環境 ===== | ||
+ | |||
+ | ^ システム | FreeBSD 9.2-RELEASE-p12 [Root on ZFS環境] || | ||
+ | ^ 移行元 | HDD 1 |TOSHIBA MQ01ABD100 (1TB) ZFSミラー構成 | | ||
+ | ^ ::: | HDD 2 |TOSHIBA MQ01ABD100 (1TB) ZFSミラー構成 | | ||
+ | ^ 移行先 | SSD 1 [ada9] | INTEL SSDSC2BA200G3T (200GB) | | ||
+ | ^ ::: | SSD 2 [ada1] | Crucial CT128M550SSD1 (128GB) | | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | * システムは現状60GBを確保してあるが13GB程度しか使っていないので、SSD移行時に30GBへと縮小する。 | ||
+ | * < | ||
+ | * zvolのスワップは挙動が怪しそうなので、やっぱりSSDに専用パーティションを作る。基本的に物理メモリは不足しないものとし、スワップはあくまで緊急用の位置付けの8GBとする。 | ||
+ | * システム、ZILはSSD1とSSD2でミラー構成とする。 | ||
+ | * L2ARCは各SSD単体で確保する。 | ||
+ | * SSD1には仮想マシンの仮想HDD置き場を作る。 | ||
+ | |||
+ | ===== 手順 ===== | ||
+ | |||
+ | ==== SSDの準備 ==== | ||
+ | |||
+ | 仮のプール'' | ||
+ | |||
+ | M550 | ||
+ | < | ||
+ | $ sudo gpart create -s gpt ada1 | ||
+ | ada1 created | ||
+ | $ sudo gpart add -a 4k -s 64k -t freebsd-boot ada1 | ||
+ | ada1p1 added | ||
+ | $ sudo gpart add -a 4k -s 30g -t freebsd-zfs ada1 | ||
+ | ada1p2 added | ||
+ | $ gpart show ada1 | ||
+ | => | ||
+ | | ||
+ | | ||
+ | 168 | ||
+ | | ||
+ | </ | ||
+ | |||
+ | DC S3700 | ||
+ | < | ||
+ | $ sudo gpart create -s gpt ada9 | ||
+ | ada9 created | ||
+ | $ sudo gpart add -a 4k -s 64k -t freebsd-boot ada9 | ||
+ | ada9p1 added | ||
+ | $ sudo gpart add -a 4k -s 30g -t freebsd-zfs ada9 | ||
+ | ada9p2 added | ||
+ | $ gpart show ada9 | ||
+ | => | ||
+ | | ||
+ | | ||
+ | 168 | ||
+ | | ||
+ | </ | ||
+ | |||
+ | 忘れずにブートコードを書き込む。 | ||
+ | < | ||
+ | $ sudo gpart bootcode -b /boot/pmbr -p / | ||
+ | bootcode written to ada1 | ||
+ | $ sudo gpart bootcode -b /boot/pmbr -p / | ||
+ | bootcode written to ada4 | ||
+ | </ | ||
+ | |||
+ | 例によって4kセクタでzpoolを作る。 | ||
+ | < | ||
+ | $ sudo gnop create -S 4096 /dev/ada1p2 | ||
+ | $ sudo gnop create -S 4096 /dev/ada9p2 | ||
+ | $ sudo zpool create ssd_zroot mirror ada1p2.nop ada9p2.nop | ||
+ | $ sudo zpool export ssd_zroot | ||
+ | $ sudo gnop destroy / | ||
+ | $ sudo gnop destroy / | ||
+ | $ sudo zpool import zssd | ||
+ | $ zpool status zssd | ||
+ | pool: zssd | ||
+ | | ||
+ | scan: none requested | ||
+ | config: | ||
+ | |||
+ | NAME STATE READ WRITE CKSUM | ||
+ | ssd_zroot | ||
+ | mirror-0 | ||
+ | ada1p2 | ||
+ | ada9p2 | ||
+ | |||
+ | errors: No known data errors | ||
+ | </ | ||
+ | |||
+ | ==== システムの移動 ==== | ||
+ | |||
+ | 現行のHDDのシステムzrootをシングルユーザーモードで起動し、移行先の仮プールzssdにsnapshotをsend/ | ||
+ | |||
+ | 尚、システムはzroot/ | ||
+ | |||
+ | <code bash> | ||
+ | # zfs snapshot -r zroot/ | ||
+ | # zfs send -Rp zroot/ | ||
+ | receiving full stream of zroot/ | ||
+ | received 769MB stream in 2 seconds (385MB/sec) | ||
+ | receiving full stream of zroot/ | ||
+ | received 6.45GB stream in 99 seconds (66.8MB/ | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | 送受信が終わったら、忘れずに移行先のbootfsを設定する。 | ||
+ | |||
+ | <code bash> | ||
+ | # zpool set bootfs=zssd/ | ||
+ | </ | ||
+ | |||
+ | ==== 移行先システムの起動確認 ==== | ||
+ | |||
+ | **移行元システムのHDDを物理的に外し**、移行先のSSDでシステムが起動するか確認する。 | ||
+ | |||
+ | mountrootで失敗するので、移行先のルートzfs: | ||
+ | |||
+ | < | ||
+ | Mounting from zfs: | ||
+ | |||
+ | Loader variables: | ||
+ | vsf.root.mountfrom=zfs: | ||
+ | | ||
+ | Manual root filesystem specification: | ||
+ | < | ||
+ | Mount < | ||
+ | and with the specified (optional) option list. | ||
+ | |||
+ | eg. usf:/ | ||
+ | zfs:tank | ||
+ | cd9660:/ | ||
+ | (which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /) | ||
+ | |||
+ | ? List valid disk boot devices | ||
+ | . Yield 1 second (for background tasks) | ||
+ | <empty line> | ||
+ | |||
+ | mountroot> | ||
+ | </ | ||
+ | |||
+ | これで正常に起動しなければ何かがおかしいので、最初から手順を見直す。 | ||
+ | |||
+ | ==== 移行先プールの名称変更 ==== | ||
+ | |||
+ | USBメモリやCDなどの**FreeBSDインストーラで起動しShellに落ちる**(以後、fixit環境と呼ぶ)。 | ||
+ | |||
+ | ルートプール名を移行前と同じにしたいので、移行先のzssdプールをzrootにリネームする。 | ||
+ | |||
+ | 念のためzssdがあるか確認。 | ||
+ | <code bash> | ||
+ | # zpool import -N -o cachefile=/ | ||
+ | ZFS filesystem version: 5 | ||
+ | ZFS storage pool version: features support (5000) | ||
+ | cannot import ' | ||
+ | use ' | ||
+ | </ | ||
+ | |||
+ | 案の定「別システムのプールだよ」と警告されるので、-fオプションでインポート&名前変更。ついでにzpool.cacheを生成。 | ||
+ | <code bash> | ||
+ | # zpool import -N -o cachefile=/ | ||
+ | # zpool export zroot | ||
+ | # zpool import -N -o cachefile=/ | ||
+ | </ | ||
+ | |||
+ | Root on ZFS環境ではルートディレクトリのmountpointはlegacyになっているハズなので、適切にmountして生成したzpool.cacheを/ | ||
+ | <code bash> | ||
+ | mkdir /tmp/zroot | ||
+ | mount -t zfs zroot/ROOT /tmp/zroot | ||
+ | cp / | ||
+ | </ | ||
+ | |||
+ | マシンをシャットダウンする。 | ||
+ | |||
+ | ==== 移行元ルートプールの削除 ==== | ||
+ | |||
+ | 今度は**移行先のSSDを物理的に外し、移行前のシステムを付け**、fixit環境に入る。 | ||
+ | |||
+ | 移行元のzrootがある事を確認し、問題がなければ< | ||
+ | |||
+ | <code bash> | ||
+ | # camcontrol devlist | ||
+ | <TOSHIBA MQ01ABD100 AX0P7E> | ||
+ | <TOSHIBA MQ01ABD100 AX0P7E> | ||
+ | # zpool import -Nf zroot | ||
+ | # zpool status zroot | ||
+ | zpool status zroot | ||
+ | pool: zroot | ||
+ | | ||
+ | scan: none requested | ||
+ | config: | ||
+ | |||
+ | NAME STATE READ WRITE CKSUM | ||
+ | zroot | ||
+ | mirror-0 | ||
+ | ada0p3 | ||
+ | ada2p3 | ||
+ | # zpool destroy zroot | ||
+ | </ | ||
+ | |||
+ | 作業途中で旧システムを消すのは恐ろしく、こういう事を趣味にしている人々は往々にして「何かあった時」のために保全しておきたくなるが、それは今回に限っては悪魔の囁きってヤツだ。下手に残しておくと新旧システムのプール情報が入り乱れる事になり逆に危険である。 | ||
+ | |||
+ | 念には念を入れ、zrootの構成パーティションも削除(多分ここまでしなくても大丈夫)。 | ||
+ | |||
+ | <code bash> | ||
+ | # gpart delete -i 3 ada0 | ||
+ | ada0p3 deleted | ||
+ | # gpart delete -i 3 ada2 | ||
+ | ada2p3 deleted | ||
+ | </ | ||
+ | |||
+ | ==== 各種パーティションの準備 ==== | ||
+ | |||
+ | 移行先のシステムで起動し、slog/ | ||
+ | |||
+ | M550 | ||
+ | <code bash> | ||
+ | $ sudo gpart add -a 4k -s 8g -t freebsd-zfs ada1 | ||
+ | ada1p3 added | ||
+ | $ sudo gpart add -a 4k -s 8g -t freebsd-zfs ada1 | ||
+ | ada1p4 added | ||
+ | $ sudo gpart add -a 4k -s 40g -t freebsd-zfs ada1 | ||
+ | ada1p5 added | ||
+ | </ | ||
+ | |||
+ | DC S3700 | ||
+ | <code bash> | ||
+ | $ sudo gpart add -a 4k -s 8g -t freebsd-zfs ada9 | ||
+ | ada9p3 added | ||
+ | $ sudo gpart add -a 4k -s 8g -t freebsd-zfs ada9 | ||
+ | ada9p4 added | ||
+ | $ sudo gpart add -a 4k -s 40g -t freebsd-zfs ada9 | ||
+ | ada9p5 added | ||
+ | $ sudo gpart add -a 4k -s 80g -t freebsd-zfs ada9 | ||
+ | ada9p6 added | ||
+ | $ sudo gpart add -a 4k -s 8g -t freebsd-swap ada9 | ||
+ | ada9p7 added | ||
+ | </ | ||
+ | |||
+ | ==== スワップを有効化 ==== | ||
+ | |||
+ | / | ||
+ | < | ||
+ | # | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | 正しくマウントされるか確認。 | ||
+ | <code bash> | ||
+ | $ sudo swapon -aq | ||
+ | $ swapinfo -m | ||
+ | Device | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ==== / | ||
+ | |||
+ | HDDからシステム&スワップパーティションが無くなったので、晴れて/ | ||
+ | |||
+ | ホームディレクトリ用プールをインポート | ||
+ | < | ||
+ | sudo zpool import zhome | ||
+ | </ | ||
+ | |||
+ | 現状を確認。 | ||
+ | <code bash> | ||
+ | $ zpool status zhome | ||
+ | pool: zhome | ||
+ | | ||
+ | scan: scrub canceled on Sun Mar 22 10:40:24 2015 | ||
+ | config: | ||
+ | |||
+ | NAME STATE READ WRITE CKSUM | ||
+ | zhome | ||
+ | mirror-0 | ||
+ | ada3p4 | ||
+ | ada0p4 | ||
+ | |||
+ | errors: No known data errors | ||
+ | </ | ||
+ | |||
+ | ミラーの片割れada0p4を外す。 | ||
+ | <code bash> | ||
+ | $ sudo zpool detach zhome ada0p4 | ||
+ | $ zpool status zhome | ||
+ | pool: zhome | ||
+ | | ||
+ | scan: scrub canceled on Sun Mar 22 10:40:24 2015 | ||
+ | config: | ||
+ | |||
+ | NAME STATE READ WRITE CKSUM | ||
+ | zhome | ||
+ | ada3p4 | ||
+ | </code bash> | ||
+ | |||
+ | 現在のパーティション構成を確認し、不要なものを消す。 | ||
+ | <code bash> | ||
+ | $ gpart show ada0 | ||
+ | => 34 1953525101 | ||
+ | 34 | ||
+ | 40 | ||
+ | | ||
+ | 41943208 | ||
+ | | ||
+ | 1953320328 | ||
+ | |||
+ | $ sudo gpart delete -i 2 ada0 | ||
+ | ada0p2 deleted | ||
+ | $ sudo gpart delete -i 4 ada0 | ||
+ | ada0p4 deleted | ||
+ | $ sudo gpart delete -i 1 ada0 | ||
+ | ada0p1 deleted | ||
+ | </ | ||
+ | |||
+ | でもって/ | ||
+ | |||
+ | <code bash> | ||
+ | $ sudo gpart add -a 4k -s 930g -t freebsd-zfs ada0 | ||
+ | ada0p1 added | ||
+ | $ gpart show ada0 | ||
+ | => 34 1953525101 | ||
+ | 34 | ||
+ | 40 1950351360 | ||
+ | 1950351400 | ||
+ | </ | ||
+ | |||
+ | 今しがた作ったパーティションで再びミラーにする。 | ||
+ | <code bash> | ||
+ | $ sudo zpool attach zhome ada3p4 ada0p1 | ||
+ | $ zpool status zhome | ||
+ | pool: zhome | ||
+ | | ||
+ | status: One or more devices is currently being resilvered. | ||
+ | continue to function, possibly in a degraded state. | ||
+ | action: Wait for the resilver to complete. | ||
+ | scan: resilver in progress since Sun Mar 29 11:57:01 2015 | ||
+ | 34.4M scanned out of 389G at 1.19M/s, 93h9m to go | ||
+ | 34.1M resilvered, 0.01% done | ||
+ | config: | ||
+ | |||
+ | NAME STATE READ WRITE CKSUM | ||
+ | zhome | ||
+ | mirror-0 | ||
+ | ada3p4 | ||
+ | ada0p1 | ||
+ | |||
+ | errors: No known data errors | ||
+ | </ | ||
+ | |||
+ | 389GBを2.5時間程でリビルド出来た。ada3の方も同様に行う。 | ||
+ | |||
+ | 両HDDとも拡張ができたら、仕上げにzpoolに容量拡張を通知して初めてプール容量が増える(autoexpandプロパティがonになってれば勝手に増えるけども)。 | ||
+ | |||
+ | <code bash> | ||
+ | $ zfs list zhome | ||
+ | NAME USED AVAIL REFER MOUNTPOINT | ||
+ | zhome | ||
+ | |||
+ | $ sudo zpool online -e zhome ada0p1 | ||
+ | zfs list zhome | ||
+ | NAME USED AVAIL REFER MOUNTPOINT | ||
+ | zhome | ||
+ | </ | ||
+ | |||
+ | ==== slog/ | ||
+ | |||
+ | / | ||
+ | |||
+ | < | ||
+ | $ sudo zpool add zhome log mirror ada1p3 ada9p3 | ||
+ | $ sudo zpool add zhome cache ada9p5 | ||
+ | $ zpool status zhome | ||
+ | pool: zhome | ||
+ | | ||
+ | scan: resilvered 389G in 2h31m with 0 errors on Sun Mar 29 16:58:56 2015 | ||
+ | config: | ||
+ | |||
+ | NAME STATE READ WRITE CKSUM | ||
+ | zhome | ||
+ | mirror-0 | ||
+ | ada0p1 | ||
+ | ada3p1 | ||
+ | logs | ||
+ | mirror-1 | ||
+ | ada1p3 | ||
+ | ada9p3 | ||
+ | cache | ||
+ | ada9p5 | ||
+ | </ | ||