2013-03-10: | 作成 |
---|---|
2013-03-15: | タイトルの「exFAT移行失敗、」を消去しました |
2013-03-21: | rsyncのコピー元がデバイス名になっていたため修正しました。 |
2013-03-25: | タイトルを変更しました。元は「LVM上のZFSを削除後復旧させる」 |
2013-06-28: | 書き忘れていましたが一ヶ月ぐらいでexFATが壊れたので 移行しました。 |
家のUbuntu Linuxで重複排除を目的にLVMのLV上でZFSを使っていたのですが、 LVM、ZFS、パーティションも8つあるので、どこに何があるのかよくわからなくなってきました。 家でWindowsを使用することが多くなってきたので、ZFSをやめ、 Windowsでも使用できるようにexFATに移行することにしました。
ちなみにZFSの重複排除の圧縮率は1.1~1.2ぐらいでした。
まず、WindowsでフォーマットしたexFATのパーティションをマウントします。 ちなみに現在最新版のUbuntu 12.10です。:
# apt-get install fuse-exfat
# mkdir /mnt/exfat
# mount -t exfat-fuse /dev/sdb2 /mnt/exfat
データをコピーします。通常オプションは-aですが、パーミッション等がexFATに存在しないため、 エラーがたくさん表示されます。気になるので、-rオプションでコピーを行いました。:
# rsync -r /pool/media/ /mnt/exfat/media/
これで移行完了です。ではZFSの領域を削除するとします。:
# zpool destroy pool
# lvremove /dev/vgdata/data3
とここで気づいたのですが、移行先のexFATのファイルの更新日付がすべて今日の日付になっています。 よく考えてみると-rだけではタイムスタンプはコピーされません。 -rtにする必要がありました。なんだか気になるのですが、もうZFSもその下のLVも消してしまいましたし、 どうしようもありません。
でも、ZFSもLVMもエントリを消した直後で、まだ何も書き込み操作を行うようなことをしていないので、 まだ間に合うかもしれません。
そういえば、LVMに関しては/etc/lvm/archiveにLVM設定のバックアップがあったような気がします。 ということで「/etc/lvm/archive」で検索してみますと、すぐに方法が書かれたブログが見つかりました。助かりました。
では、やってみます。まず設定のバックアップファイルを調べます。 (以下、必要ない部分は消去しています。またID等は改変しています。):
# ls -ltr /etc/lvm/archive/vgdata*
....
-rw------- 1 root root 1466 3月 5 2012 vgdata_00018.vg-rw------- 1 root root 1831 3月 9 00:23 vgdata_00019-1959051948.vg
最後のバックアップが「vgdata_00019-1959051948.vg」のようです。 次にこのファイルのバックアップ内容を確認します。:
# vgcfgrestore -f vgdata_00019-1959051948.vg -l vgdata
....
File: vgdata_00019-1959051948.vg
VG name: vgdata
Description: Created *before* executing 'lvremove /dev/vgdata/data3'
Backup Time: Sat Mar 9 00:25:31 2013
「Created *before* executing ‘lvremove /dev/vgdata/data3’」とあります。 「/dev/vgdata/data3」を削除する*前*に作成されたもののようです。 このファイルで正しいようなので、復旧させます。 復旧させるには確認コマンドの「-l」オプションを省けばいいだけです。:
# vgcfgrestore -f vgdata_00019-1959051948.vg vgdata
Restored volume group vgdata
ではLVを使用できるようにアクティブにします。:
# vgchange -ay vgdata
3 logical volume(s) in volume group "vgdata" now active
LVが復活していることを確認します。:
# lvdisplay -c
....
/dev/vgdata/data3:vgdata:3:1:-1:0:474374380:51200:-1:0:-1:252:1
次にZFSを復旧しなければなりません。どうやって調べましょう。 削除した時の復旧方法なので、削除コマンドのところに書いてあるかもしれません。 「zpool destroy」で検索してみます。開発元(?)のOracleの以下のページが見つかります。
狙い通り以下の記述がありました。
- 詳細は、 「破棄された ZFS ストレージプールを回復する」
- を参照してください。
ではやってみましょう。 まず復旧できる領域を以下のコマンドで確認します。:
# zpool import -D
....
pool: pool
id: ************************
state: ONLINE (DESTROYED)
action: The pool can be imported using its name or numeric identifier.
config:
pool ONLINE
disk/by-id/dm-name-vgdata-data3 ONLINE
削除したpoolがありました(ちなみにpoolっていうプール名です。紛らわしい)。 復旧は確認コマンドの後ろに復旧するプール名を書くだけです。:
# zpool import -D pool
復旧されていることを確認します。:
# ls /pool
では、再びコピーを行います。:
# rsync -rt /pool/media/ /mnt/exfat/media/
蛇足ですがパーティションを消してしまった後の復旧はsfdiskで行います。 ただし、バックアップは自動で行われないので、構成を変更したら手動で保存しておく必要があります。 よくオプションを忘れるので書いておきます。
- バックアップ
sfdisk -d /dev/sda > sda.sfdisk
- リストア
sfdisk < sda.sfdisk
0 件のコメント:
コメントを投稿