ディスクのクローン

提供: ArchWiki
2018年2月6日 (火) 23:09時点におけるKusakata.bot (トーク | 投稿記録)による版 (文字列「http://www.mail-archive.com/」を「https://www.mail-archive.com/」に置換)
ナビゲーションに移動 検索に移動

関連記事

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

dd を使う

dd コマンドはシンプルでありながら、多目的に使える強力なツールです。ファイルシステムのタイプやオペレーティングシステムとは関係なく、ブロックごとに、コピーを行うことができます。ライブ CD などの、ライブ環境から dd を使用すると便利です。

警告: この種のコマンドの常として、使うときは慎重にならなければなりません。さもないとデータを破壊するおそれがあります。入力ファイル (if=) と出力ファイル (of=) の順序に注意し、逆にしないように!必ずコピー先ドライブまたはパーティション (of=) のサイズがコピー元 (if=) のサイズ以上になっているようにしてください。

パーティションのクローン

物理ディスク /dev/sda のパーティション 1 を、物理ディスク /dev/sdb のパーティション 1 に複製。

# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress
警告: 出力ファイル of= (この例では sdb1) が存在しない場合は、ルートファイルシステムにこの名前のファイルが作成されてしまいます。

ハードディスク全体のクローン

物理ディスク /dev/sdX を物理ディスク /dev/sdY に複製:

# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress

このコマンドは MBR (とブートローダー)、全てのパーティション、UUID、データを含めディスクの全てを複製します。

  • bs= はブロックサイズをセットします。デフォルトはハードドライブの「古典的な」ブロックサイズである 512 バイトですが、64K や 128K など大きな値を使ったほうが最近の事情には即しています。また、以下の警告も読んでください。これはブロックサイズを変えるだけでなく、読み取りエラーがどのように伝播するかにも関係しています。どの値が最適なのかは [1][2] などを読んでください。
  • noerror は読み取りエラーを全て無視して操作を続行します。dd のデフォルトの挙動ではエラーがあると dd は動作を停止します。
  • sync は読み取りエラーが存在した場合、入力ブロックをゼロで埋めるため、データのオフセットも同期します。
  • status=progress は定期的に転送の統計を表示して、操作が完了するまでの時間を見積もることができます。
警告: ブロックサイズを指定すると、読み取りエラーの制御方法が影響を受けます。以下を読んでください。

dd では入力ブロックサイズ (IBS) と出力ブロックサイズ (OBS) の指定ができます。bs をセットすると IBS と OBS の両方をセットしたことになります。例えばブロックサイズを 1MiB にすると、通常は 1024*1024 バイト単位で読み書きします。しかし読み取りエラーが起きるとおかしくなります。noerror,sync オプションを使うと dd は読み取りエラーをゼロで埋めるようになると思いがちですが、そうではありません。ドキュメントによると dd は読み取りが完了した後で OBS を IBS と同じサイズになるようゼロ埋めします。つまりそのブロックの最後にゼロが追加されます。したがって、1MiB のブロックの最初でたった 512 バイトの読み取りエラーがあるだけで、1MiB 全体が駄目になってしまうことを意味します。例えば 12ERROR89 というデータの読み取り部分にエラーがあると、結果は 120000089 ではなく 128900000 になります。

自分のディスクにエラーがないと自信を持てるなら、ブロックサイズを大きくしてもよいでしょう。そうするとコピー速度が数倍向上します。例えば、単純な Celeron 2.7 GHz のシステムで bs を 512 から 64 KiB に変えたところ、コピー速度は 35 MB/s から 120 MB/s になりました。しかしくれぐれも、コピー元ディスクで読み取りエラーがあった場合はコピー先ディスクで破損ブロックになってしまうことに注意してください。つまり 512 バイトの読み取りエラーが1回あるだけで出力先ブロックの 64 KiB 全体が駄目になってしまいます。

ヒント: dd の進捗状況を表示したい場合、status=progress オプションを使って下さい。詳しくは Core Utilities#dd を参照。
ノート:
  • ext2/3/4 ファイルシステムで一意な UUID を復活させるには、各パーティションで tune2fs /dev/sdXY -U random を実行してください。
  • dd で変更したパーティションテーブルはカーネルには認識されません。再起動することなしにカーネルに変更を通知するには、(GNU Parted に含まれる) partprobe のようなユーティリティを使ってください。

パーティションテーブルのバックアップ

fdisk#バックアップとリストアを見てください。

ディスクイメージの作成

1. liveCD や liveUSB から起動。

2. コピー元ドライブの全てのパーティションがマウント解除されていることを確認する。

3. 外部 HD をマウント。

4. ドライブをバックアップ:

# dd if=/dev/sdX conv=sync,noerror bs=64K | gzip -c  > /path/to/backup.img.gz

必要であれば (外部 HD が FAT32 でフォーマットされている場合など) ディスクイメージを分割します (splitman ページを参照):

# dd if=/dev/sdX conv=sync,noerror bs=64K | gzip -c | split -a3 -b2G - /path/to/backup.img.gz

ローカルに十分なディスク空き容量がない場合は、イメージを ssh で転送することができます:

# dd if=/dev/sdX conv=sync,noerror bs=64K | gzip -c | ssh user@local dd of=backup.img.gz

5. イメージ内に保存されたパーティションテーブルを解釈できるようにするために、ドライブのレイアウトに関する付加情報を保存します。その情報の中で最も重要なのはシリンダーサイズです。

# fdisk -l /dev/sdX > /path/to/list_fdisk.info
ノート: 使用するブロックサイズ (bs=) はバックアップするハードディスクのキャッシュ容量に合わせると良いでしょう。例えばキャッシュが 8 MiB なら bs=8192K とします。この記事で使っている 64 Kib はデフォルトの bs=512 バイトよりも高速に動作しますが、更に大きい bs= を指定すれば高速化できます。

システムのリストア

システムをリストアするには:

# gunzip -c /path/to/backup.img.gz | dd of=/dev/sdX

もしくはイメージが複数のボリュームに分かれている場合:

# cat /path/to/backup.img.gz* | gunzip -c | dd of=/dev/sdX

ddrescue を使う

ddrescue はデータの複製・復元のために作られたツールです。ファイルやブロックデバイスからデータを別の場所 (ハードディスクや CD-R など) にコピーして、読み取りエラーが発生したドライブから無事な部分を救い出すことができます。

故障したドライブから複製する場合、ddrescue を2回実行してください。1回目では、読み取りエラーが存在しないブロックをコピーして rescue.log にエラーを出力します:

# ddrescue -f -n /dev/sdX /dev/sdY rescue.log

2回目では、不良ブロックだけをコピーして何とかデータを取り出せないか3回コピーを試します:

# ddrescue -d -f -r3 /dev/sdX /dev/sdY rescue.log

コピーできたらファイルシステムをチェックして新しいドライブをマウントしてください:

# 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
ノート: gparted は e2image を使って効率的に ext2/3/4 パーティションを複製します。

ディスククローンソフトウェア

以下のアプリケーションはファイルシステム全体をバックアップして、故障したときに簡単に復元することができます。ほとんどが Live CD や USB ドライブとして使えます。特定の時間の完全なシステムイメージを保存することができ、良い状態の設定を確認したいときにもよく使われます。

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

  • Acronis True Image — Windows 用の商用ディスク複製ツール。(Windows の中から) ライブ環境を作成できるため、使用するマシンに Windows がインストールされていなくても使えます。ウェブサイトで Acronis ソフトウェアを登録すれば、Linux ベースのライブ CD や Windows ベースのライブ環境 CD を作成するための BartPE のプラグインをダウンロードできます。Windows ベースの Windows PE のライブ CD を作成することも可能です。Acronis によって作成された ISO ライブ CD イメージは ハイブリッドブート 機能を持っていないため直接 USB ストレージに書き込むことはできません。
http://www.acronis.com/products/trueimage/ ||
  • Arch Backup — シンプルな設定を使用する平凡なバックアップスクリプト。
    • 圧縮方法を設定可能。
    • 複数の場所にバックアップ。
https://github.com/p5n/archlinux-stuff/tree/master/arch-backup/ || arch-backupAUR
  • Clonezilla — 障害復旧、ディスククローン、ディスクイメージング、デプロイメントソリューション。
    • ライブ CD, USB フラッシュドライブ, PXE サーバーから起動。
    • ext2, ext3, ext4, reiserfs, reiser4, xfs, jfs, btrfs, FAT32, NTFS, HFS+ などをサポート。
    • Partclone (デフォルト), Partimage (オプション), ntfsclone (オプション), dd を使ってパーティションをイメージ化または複製。
    • 多数のマシンを一度にリストアするマルチキャストサーバー。
    • Arch Linux のインストールメディアに同梱されています。
http://clonezilla.org/ || clonezilla
  • FSArchiver — 安全で柔軟性のあるファイルシステムバックアップ・デプロイメントツール。
    • 基本的なファイル属性をサポート (パーミッション, 所有者, ...)。
    • ひとつのアーカイブで複数のファイルシステムをサポート。
    • (SELinux によって使われる) 拡張属性をサポート。
    • 全ての Linux ファイルシステムで共通のファイルシステム属性をサポート (ラベル, uuid, ブロックサイズ)。
    • ntfs ファイルシステム をサポート (Windows パーティションの複製を作成可能)。
    • アーカイブに書き込まれたデータのチェックサムを作成 (ヘッダ, データブロック, ファイル全体)。
    • 破損しているアーカイブの復旧ができます (作業ファイルをスキップ)。
    • lzo, gzip, bzip2, lzma のマルチスレッド圧縮。
    • 巨大なアーカイブを複数のファイルに分割することでファイルの最大容量を固定することができます。
    • パスワードによるアーカイブの暗号化。OpenSSL の libcrypto による blowfish を使用。
    • マウントされている root ファイルシステムのバックアップのサポート (-A オプション)。
    • System Rescue CD に同梱されています。
http://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 をサポート。
    • 圧縮をサポート。
    • ncurses インターフェイスで使うこともできます。
http://partclone.org/ || partclone
  • PartedMagic — PartImage などのリカバリツールが同梱されているライブ CD/USB。
http://partedmagic.com/doku.php?id=start ||
  • Partimage — Linux/UNIX 環境向けのディスク複製ユーティリティ。
    • ライブ CD が存在します。
    • Linux, Windows, macOS の様々なファイルシステムをサポート。
    • 圧縮。
    • Samba/NFS を使用してネットワーク経由で保存したり CD や DVD に保存できます。
    • 開発は停止して FSArchiver に移っています。
http://www.partimage.org/Main_Page || partimage
  • Q7Z — Linux 向けの P7Zip GUI。データの圧縮とバックアップを楽にします。次の圧縮ファイルを作成することが可能: 7z, BZip2, Zip, GZip, Tar。
    • 既存のアーカイブを素早くアップデート。
    • 複数のフォルダを一つのストレージにバックアップ。
    • 保護されたアーカイブを作成・展開。
    • アーカイブのプロファイル・リストを使うことで負担を軽減。
http://k7z.sourceforge.net/ || q7zAUR
  • Redo Backup and Recovery — Linux CD ブータブルイメージから実行できるバックアップ・障害復旧アプリケーション。
    • ディスクパーティションのベアメタルバックアップとリカバリができます。
    • バックエンドとして xPUDPartclone を使用。
http://www.redobackup.org/ || パッケージが存在しないか AUR で検索
  • System Tar & Restore — フルシステムバックアップと復元を行うための bash スクリプトのセット。
    • 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

参照