ddコマンドを使用してzpoolストレージプールのブロックを読み取りたい。zpoolは、vxvmのような他のボリュームマネージャーのようにデバイスファイルを作成しないためです。読み取りに使用するブロックデバイスがわかりません。zpoolのブロックごとのデータを読み取る方法はありますか?
4 に答える
おそらく zdb コマンドを使用できます。ここにそれに関するpdfとヘルプ出力があります。
http://www.bruningsystems.com/osdevcon_draft3.pdf
# zdb --help
zdb: illegal option -- -
Usage: zdb [-CumdibcsDvhL] poolname [object...]
zdb [-div] dataset [object...]
zdb -m [-L] poolname [vdev [metaslab...]]
zdb -R poolname vdev:offset:size[:flags]
zdb -S poolname
zdb -l [-u] device
zdb -C
Dataset name must include at least one separator character '/' or '@'
If dataset name is specified, only that dataset is dumped
If object numbers are specified, only those objects are dumped
Options to control amount of output:
-u uberblock
-d dataset(s)
-i intent logs
-C config (or cachefile if alone)
-h pool history
-b block statistics
-m metaslabs
-c checksum all metadata (twice for all data) blocks
-s report stats on zdb's I/O
-D dedup statistics
-S simulate dedup to measure effect
-v verbose (applies to all others)
-l dump label contents
-L disable leak tracking (do not load spacemaps)
-R read and display block from a device
Below options are intended for use with other options (except -l):
-A ignore assertions (-A), enable panic recovery (-AA) or both (-AAA)
-F attempt automatic rewind within safe range of transaction groups
-U <cachefile_path> -- use alternate cachefile
-X attempt extreme rewind (does not work with dataset)
-e pool is exported/destroyed/has altroot/not in a cachefile
-p <path> -- use one or more with -e to specify path to vdev dir
-P print numbers parsable
-t <txg> -- highest txg to use when searching for uberblocks
Specify an option more than once (e.g. -bb) to make only that option verbose
Default is to dump everything non-verbosely
残念ながら使い方がわかりません。
# zdb
tank:
version: 28
name: 'tank'
...
vdev_tree:
...
children[0]:
...
children[0]:
...
path: '/dev/label/bank1d1'
phys_path: '/dev/label/bank1d1'
...
そこで、配列インデックス 0 0 を使用して最初のディスク (bank1d1) を取得し、このコマンドを実行しました。それは何かをしました。出力の読み方がわかりません。
zdb -R タンク 0:0:4e00:200 | 文字列
楽しんでください...何も破壊しないようにしてください。マニュアルページからの警告は次のとおりです。
The zdb command is used by support engineers to diagnose failures and
gather statistics. Since the ZFS file system is always consistent on
disk and is self-repairing, zdb should only be run under the direction
by a support engineer.
そして、あなたが実際に探していたものを教えてください。あなたがバックアップをしたかったというアランの意見は正しかったですか?
プール内の基盤となる raw デバイスから読み取ることはできますが、私が知る限り、プール全体を表す単一の連続したブロック デバイスという概念はありません。ZFS のプールは、「従来の」ボリューム マネージャのように連続した単一のセクタ ブロックではありません。ZFS の内部構造はツリーに近く、ブロックのフラットな配列として表現するのはやや困難です。
Ben Rockwood のブログ記事「zdb: 至近距離での ZFS の調査」は、内部にあるものをよりよく理解するのに役立つかもしれません。
ZFSファイルシステムをバックアップする場合は、次のツールを使用する必要があります。
- ファイルシステムの安定したスナップショットを作成するための「zfssnapshot」
- 'zfs send'は、スナップショットのコピーを別の場所に送信します
- 'zfs receive'は、スナップショットからファイルシステムに戻ります。
'dd'は、ほぼ確実に、使用する必要のあるツールではありません。あなたの場合、「zfs send」を実行して、出力を他のファイルシステム上のファイルにリダイレクトすることができます。
詳細については、ZFS管理ガイドの第7章を参照してください。
そうすることで何が役立つかはわかりませんが、プールで使用される基礎となるデバイスのブロックを確実に読み取ることができます。コマンドで表示されzpool status
ます。zpool ではなく zvol について本当に質問している場合は、/dev/zvol/rdsk/pool-name/zvol-name でアクセスできます。zpool の内部データを見たい場合は、おそらく zdb を使用することをお勧めします。