ディスクのクローン

提供: ArchWiki
2024年12月24日 (火) 00:59時点におけるKgx (トーク | 投稿記録)による版 (→‎ddrescue を使う: 同期)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

ディスクのクローンとはパーティションやハードドライブ全体のイメージを作成することを言います。バックアップリカバリ 用に他のコンピューターにドライブをコピーするのに役立ちます。

ノート: 論理セクタサイズが異なる ドライブ 間のディスククローニングはお勧めしません。
  • 論理セクタサイズが小さいドライブ (例:4096バイトから512バイト) への移行は、セクタ番号でパーティション境界を指定するため、パーティションテーブルの再作成が必要です。
  • ファイルシステムのブロックサイズが対象ドライブの論理セクタサイズより小さいか、割り切れない場合、論理セクタサイズの大きいドライブ (例:512バイトから4096バイト) への移動ができない場合があります。
ヒント: 時間の経過とともに ファイルシステム は新しい機能を取得し、mkfs ユーティリティはデフォルトを変更しますが、すべての新機能を再フォーマットせずに有効にできるわけではありません。したがって、データを新しいドライブに移動するときは、ブロックデバイスやファイルシステムのクローンを作成する代わりに、新しいファイルシステムを作成し、rsync などを使ってファイル (およびその属性、ACL、拡張属性など) のみをコピーすることを検討してください。

ブロックレベルのクローニング

dd を使う

dd#ディスクの複製と復元Core utilities#dd の代替 を参照してください。

ddrescue を使う

可能であれば、ディスクからのデータリカバリは、ネイティブインターフェイスを使用して実行する必要があります。SATA または古いドライブの場合は IDE です。USB アダプターを使用すると、結果が異なる場合があります。

GNU ddrescue は、読み取りエラーを無視できるデータ回復ツールです。ddrescue は、あるデバイスから別のデバイスにデータをコピーするために両方を使用できることを除いて、dd とはまったく関係がありません。主な違いは、ddrescue は洗練されたアルゴリズムを使用して故障したドライブからデータをコピーし、追加の損傷を可能な限り少なくすることです。詳細は ddrescue マニュアル を参照してください。

第 1 段階

故障したり死にかけているドライブのクローンを作るには、ddrescue を 2 回実行します。1回目では、読み取りエラーが存在しないブロックを全てコピーして、エラーを rescue.map にマッピングします。

# ddrescue --force --no-scrape /dev/sdX /dev/sdY rescue.map
--force
このオプションは、デバイス (ディスクやパーティションなど) に直接書き込む場合に使用されます。このフラグがないと、ddrescue は偶発的なデータ損失を避けるために既存のデバイスの上書きを拒否します。 --force を使用すると、この安全性チェックを回避できるため、使用するときは注意してください。
--no-scrape
このオプションは、ddrescue に、再試行 フェーズをスキップし、最初に読み取りやすいデータのコピー (最初のパス) に焦点を当てるように指示します。これにより、失敗したセクターの再試行が回避されるため、不良領域でスタックすることなくできるだけ多くのデータを迅速に回復したい場合に役立ちます。
/dev/sdX
これは、データを回復するソースデバイスを表します。/dev/sdX を実際のデバイス名に置き換えます (例: /dev/sda) ここで、X はソースのパーティション文字、Y はターゲット ブロックデバイス のパーティション文字です。
/dev/sdY
これは、回復されたデータが書き込まれる宛先デバイスまたはファイルです。この場合、それは別のデバイスです (例: /dev/sdb)。このコマンドはこのデバイスを上書きするため、これを指定するときは十分に注意してください。あるいは、path/to/file/image.img と入力するだけでイメージを作成することもできます。
rescue.map
これは、回復の進行状況を追跡するために ddrescue によって使用されるログファイルです。ログファイルは、どのセクタが正常に回復されたか、どのセクタにさらなる注意が必要かを記録するため、非常に重要です。回復プロセスが中断された場合は、最初から開始しなくても、このログファイルを使用して後で再開できます。

このコマンドは、(再試行をスキップすることで) 速度を優先しながら1つのデバイス (/dev/sdX) から別のデバイス (/dev/sdY) にデータをコピーします。

  • The --force (/dev/sdY) デバイスに直接書き込むために必要なオプション。
  • The rescue.map ファイルは進行状況を追跡し、回復が停止した場合でも再開できるようにします。

第 2 段階

第2段階では、不良ブロックのみをコピーし、諦める前にソースからの読み取りを 3 回試行します。

# ddrescue --force --idirect --retry-passes=3 --no-scrape /dev/sdX /dev/sdY rescue.map
--idirect
直接ディスクにアクセスして、一部の問題を回避できます。マップファイルの位置とサイズがセクターサイズの倍数である場合、カーネルはディスクアクセスをキャッシュしている可能性があります。これを回避してより多くのデータを回復するには、直接ディスクアクセスを使用するか、RAW デバイスからの読み取りを使用して、--sector-size で正しいセクターサイズが設定されていることを確認してください。ダイレクトディスクアクセスでは、セクター全体を読み取り、必要な部分のみを書き込むことで、任意のドメインをコピーできます。まずは --idirect オプションを試してみるか、直接アクセスできない場合は raw デバイスを使用してください。 OS とハードウェアによっては、直接アクセスは通常のキャッシュされた読み取りより遅くなったり、速くなったりする場合があります。
--retry-passes=3
不良セクタを最大 3 回まで再試行します。

このコマンドは、問題のあるセクターをより積極的に読み取ろうとします。

第 3 段階 (オプション)

# ddrescue --force --idirect --retry-passes=3 --reverse /dev/sdX /dev/sdY rescue.map

--reverse はドライブを逆方向に読み取ります。これにより、順方向読み取りを妨げる問題が回避される場合があります。

第 4 段階

第 4 段階では、きめ細かいリカバリ のために スクレイピングモードを使用します。

# ddrescue --force --idirect --retry-passes=3 /dev/sdX /dev/sdY rescue.map

--retry-passes=3 は問題のあるセクターを複数回スクレイピングします。最も損傷したセクターからデータを救出しようとします。

いつ停止するか: ドライブの読み取り速度が 0 B/s に近いままで、それ以上の改善が見られない場合、より多くのデータを回復できる可能性は低くなります。このような場合、専門のデータ復旧サービスが最良の選択肢となる可能性があります。最終的に、さらなるデータを救出せずにプロセスが停止し続ける場合は、ドライブに物理的な障害が発生している可能性があり、それ以上試行しても最小限の結果しか得られない可能性があります。

状況によっては、特定のセクターを読み取ろうとしているときに、ディスクコントローラーまたは USB アダプターがロックされる場合があります。--input-position オプションを使用して、ddrescue にその位置の後で読み取りを開始するように指示できます。

これで、ファイルシステムの破損を確認し、新しいドライブをマウントできるようになります。

# fsck -f /dev/sdY

ファイルシステムのクローン

e2image を使う

e2imagee2fsprogs にデバッグ用として含まれているツールです。使用ブロックのみをコピーして効率的に ext2, ext3, ext4 パーティションをコピーできます。e2image が使えるのは ext2, ext3, ext4 ファイルシステムだけです。未使用ブロックはコピーされないため、削除したファイルを復元するのには役に立ちません。

e2image を使って、物理ディスク /dev/sda の1番目のパーティションを物理ディスク /dev/sdb の1番目のパーティションに複製するには:

 # e2image -ra -p /dev/sda1 /dev/sdb1
ヒント: GPartede2imageを使って効率的に ext2/3/4 パーティションを複製します。

xfs_copy を使う

xfsprogsxfs_copy(8) を使用すると、XFS ファイルシステムを 1 つ以上のブロックデバイスに並行してコピーできます。

ノート: デフォルトでは、xfs_copy は新しいファイルシステム用に新しい UUID を生成します。同じ UUID のクローンを作成するには、-d オプションを使用します。これにより、ディスク交換に​​適した複製ファイルシステムが作成されます。
ヒント: XFS のクローンを複数のブロックデバイスに並行して作成するには、それらをすべて xfs_copy コマンドに追加するだけです。

たとえば、/dev/sda1 上のファイルシステムのクローンを /dev/sdb1 に作成するには、次のコマンドを実行します:

# xfs_copy /dev/sda1 /dev/sdb1

汎用性の高いクローニングソリューション

以下のアプリケーションはファイルシステム全体をバックアップして、故障したときに簡単に復元することができます。ほとんどが Live CD や USB ドライブとして使えます。1つまたは複数の特定の時点での完全なシステムイメージが含まれており、既存の良い設定を記録するときによく使われます。これらの比較については Wikipedia:Comparison of disk cloning software を参照してください。

完全なシステムバックアップを作成できる他のアプリケーションについては バックアッププログラム を参照してください。

  • Arch Backup — シンプルな設定を使用する平凡なバックアップスクリプト。
    • 圧縮方法を設定可能。
    • 複数の場所にバックアップ。
https://github.com/p5n/archlinux-stuff/tree/master/arch-backup/ || arch-backupAUR
  • Clonezilla — 障害復旧、ディスククローン、ディスクイメージング、デプロイメントソリューション。
    • 完全なバックアップとリカバリソリューション:ブートセクタ、ブートローダ、パーティションテーブルを含むドライブ全体のイメージと復元が可能です。
    • BIOS と UEFI、MBR と GPT をサポートします。
    • ライブ CD, USB フラッシュドライブ, PXE サーバーから起動。
    • ほとんどのファイルシステム (ext2-3-4、reiserfs、reiser4、xfs、jfs、btrfs、f2fs、FAT12-16-32、NTFS、HFS+、UFS など) と LVM2 をサポート。
    • Partclone (デフォルト)、Partimage (オプション)、ntfsclone (オプション) を使用する場合は空き領域を認識し、それ以外の場合は dd にフォールバックしてブロックレベルのコピーを行います (dm-crypt/LUKS コンテナー、サポートされていないファイルシステムなど。)
    • さまざまな形式 (zstd を含む) とレベルのマルチスレッド圧縮をサポート。
    • バックアップの暗号化をサポート。
    • 多数のマシンを一度にリストアするマルチキャストサーバー。
    • Arch Linux のインストールメディアに同梱されています。
https://clonezilla.org/ || clonezilla
  • Deepin Clone — Deepin によるバックアップとリストアのツール。ディスクまたはパーティションのクローン作成、バックアップ、リストアをサポートします。
https://www.deepin.org/en/original/deepin-clone/ || deepin-clone
  • FSArchiver — 安全で柔軟性のあるファイルシステムバックアップ・デプロイメントツール
    • 基本的なファイル属性をサポート (パーミッション, 所有者, ...)
    • ひとつのアーカイブで複数のファイルシステムをサポート。
    • (SELinux によって使われる)拡張属性のサポート。
    • 全ての Linux ファイルシステムで共通のファイルシステム属性をサポート (ラベル, uuid, ブロックサイズ)
    • NTFSファイルシステム をサポート(Windows パーティションの柔軟なクローンを作成する機能)
    • アーカイブに書き込まれたデータのチェックサムを作成 (ヘッダ, データブロック、ファイル全体)
    • 破損しているアーカイブの復旧ができます (作業ファイルをスキップ)
    • lzo, gzip, bzip2, lzma のマルチスレッド圧縮。
    • 巨大なアーカイブを複数のファイルに分割することでファイルの最大容量を固定することができます。
    • パスワードによるアーカイブの暗号化。OpenSSL の libcrypto による blowfish を使用。
    • マウントされている root ファイルシステムのバックアップのサポート (-A オプション)
    • System Rescue CD に同梱されています。
https://www.fsarchiver.org/ || fsarchiver
  • Mondo Rescue — バックアップメディアを作成する障害復旧ソリューション。損害を受けたシステムを再配置することができます。
    • イメージベースのバックアップ。Linux/Windows をサポート。
    • 圧縮率は調整可能。
    • ライブ環境をバックアップできます (システムを止める必要がありません)。
    • イメージを多数のファイルに分割可能。
    • Live CD で起動することで完全なリストアができます。
    • NFS, CD, テープドライブなどのメディアからバックアップ・リストアできます。
    • バックアップの検証ができます。
http://www.mondorescue.org/ || mondoAUR
  • Partclone — 使用しているブロックだけを考慮してパーティションをバックアップ・リストアできるツール。
    • ext2, ext3, ext4, hfs+, reiserfs, reiser4, btrfs, vmfs3, vmfs5, xfs, jfs, ufs, ntfs, fat(12/16/32), exfat, f2fs, nilfs をサポート。
    • 特別な機能 (圧縮、暗号化など) をスクリプト化するためのパイプ、標準入力、および標準出力をサポートします。
    • レスキューモードでは、不良ブロックをスキップして正常なブロックのみをバックアップしようとします。ソース デバイスから GNU Ddrescue ドメイン ログ ファイルを作成するオプション。
    • ncurses インターフェイスが利用可能。
    • バックアップされたすべてのブロックは、crc32 でチェックサムされます。
    • Arch Linux インストール メディアに含まれています。
https://partclone.org/ || partclone
  • Partimage — Linux/UNIX 環境向けの ncurses ディスク複製ユーティリティ。
    • ライブ CD が存在します。
    • Linux, Windows, macOS の最も一般的なファイルシステムをサポート。
    • 圧縮
    • Samba/NFS を使用してネットワーク経由で保存したり複数の CD や DVD に保存できます。
    • 開発は停止して FSArchiver に移っています。
http://www.partimage.org || partimage
  • J7Z — Linux 向けの Java による GUI でデータの圧縮やバックアップを楽にします。7z, BZip2, Zip, GZip, Tar アーカイブを作成することができます。
    • 既存のアーカイブを素早くアップデート。
    • 複数のフォルダを一つのストレージにバックアップ。
    • 保護されたアーカイブを作成・展開。
    • アーカイブのプロファイル・リストを使うことで負担を軽減。
http://j7z.xavion.name/ || j7zAUR
  • Redo Backup and Recovery — Linux CD ブータブルイメージから実行できるバックアップ・障害復旧アプリケーション。
    • ディスクパーティションのベアメタルバックアップとリカバリができます。
    • バックエンドとして xPUDPartclone を使用。
http://www.redobackup.org/ ||
  • System Tar & Restore — tar を使ったシステムのバックアップとリストア、または rsync による転送。
    • GUIおよびCLIインターフェース。
    • .tar.gz, .tar.bz2, .tar.xz, .tar アーカイブを作成。
    • openssl / gpg 暗号化をサポート。
    • rsync を使って実行中のシステムを転送。
    • Grub2, Syslinux, EFISTUB/efibootmgr, Systemd/bootctl をサポート。
https://github.com/tritonas00/system-tar-and-restore || system-tar-and-restoreAUR

参照