web-dev-qa-db-ja.com

Debianリモートマシンのディスク全体をローカルマシンにddまたはcpする方法は?

私はこの投稿を読みました- ローカルマシンでSSHを使用してリモートディスクをddし、ローカルディスクに保存する方法

ただし、次のコードは機能しません。

"dd if=/dev/sda | gzip -1 -" | dd of=image.gz

/dev/sdaディレクトリがないので。これはDebian7.0を使用しているためだと思います。

私のvpsの完全なコピーを取るためのどんな助けも大歓迎です。

2
DomainsFeatured

ディスクのデバイス名は、ディスクの種類(より正確には、ディスクが接続されているバスとコントローラーの種類、およびそれらを処理するドライバー)によって異なります。 /dev/sdaは、PCの最初のディスクの一般的な名前です(他の名前は、ドライバーに応じて使用できます。たとえば、一部の古いタイプのディスクコントローラーや一部のハードウェアRAIDコントローラーなど)。 VPSでは、ディスクは通常仮想ディスクであり、デバイス名は仮想化テクノロジーによって異なります。 /dev/vdaまたは/dev/xvda。システム上のブロックデバイス名は、dfまたはlsblkで見つけることができます。

ただし、これを使用してライブシステムからバックアップを作成しないでください!バックアップが読み取れなくなる可能性が非常に高くなります。バックアップの作成中にディスクの内容が変更された場合(ライブシステムでは避けられない(ログがどこかに書き込まれるなど))、イメージの一貫性が失われます—少し古い状態、少し新しい状態—回復できない場合があります。

バックアップを作成するための推奨される方法は、 スナップショット を作成することです。つまり、実際のシステムが変更され続けても変更されない、フリーズされたファイルシステムのビューです。それを行う方法、およびそれが可能かどうかは、システムのセットアップ方法によって異なります。 btrfsやzfsなどの一部のファイルシステムタイプには、スナップショット機能が組み込まれています。 LVMは、ボリュームのスナップショットを作成することもできます。

スナップショットを作成できない場合(または作成できる場合でも)、ファイルレベルのバックアップを作成します。変更が加えられたシステムからのファイルレベルのバックアップには一貫性がありませんが、「重要な」変更を行わない場合、バックアップは使用可能になります。たとえば、ファイルを移動する場合、バックアッププログラムがまだトラバースしていないディレクトリから、すでにトラバースしたディレクトリにファイルが移動した場合、ファイルはバックアップから省略されることがあります。一方、ログファイルが増え続ける場合は、そのファイルの中間バージョンがありますが、ファイルシステムイメージが破損することはありません。ファイルが削除されて別のファイルが作成された場合、それらのファイルがないか、一方または両方がない可能性がありますが、新しいファイルの一部のデータを指す古いファイルのディレクトリエントリはありません。

GNU tar(rootとして!)を使用して、重要なメタデータを備えたLinuxシステムをバックアップできます。

ssh root@vps 'tar -cJf - --acls --selinux --one-file-system /' >vps.tar.xz

/dev/sdaは、ディスクとの通信がSCSIドライバを直接経由する場合の規則です。コメントで、ディスクは/dev/vdaにあるとおっしゃいました。このような命名は、仮想化ソリューションではやや一般的です。 推測すると、KVMで管理されたVPSについて話していると思います。

/dev/vdaディスクをバックアップする場合は、slmの提案を使用してください。

ssh user@remote "dd if=/dev/vda | gzip -1 -" | dd of=image.gz

これにより、/dev/vdaが完全にバックアップされ、十分なスペースがあれば、後で別のディスクに再ddすることができます。

fdisk -lは機能し、デバイスファイルは/dev/vda1ですが、システム全体が含まれていますか?

あなたはそれをあまりにも早く読んだ。 /dev/vda1は、/dev/vdaディスクのパーティション(ピース)です。注意すべき3つのこと:

  • システムが/dev/vda1のルートパーティションのみで構成されている場合は、/dev/vda1をバックアップするだけで十分です。ドライブ全体(ディスクの「ヘッダー」も含む)をバックアップする必要はありません。
  • システムが/dev/vdaの複数のパーティションにまたがっている場合、すべてを取得するには、それらすべてをddする必要があります(または上記のようにディスク全体をddするだけです)。
  • システムが複数のディスクを使用している可能性もあります。それは少しまれですが、私はそれが起こる可能性があると思います。 //varおよび/dev/vdaパーティション(たとえば、/dev/vda1および/dev/vda2)と、ホームディレクトリ(/home)を配置できます。別のドライブの/dev/vdb1/dev/vdb)。

あなたの場合、lsblkがセットアップを理解するための適切なツールだと思います。それを実行して、MOUNTPOINT列を見てください。そこに何かがあるときはいつでも、システムはその行のパーティションを使用しています。すべてをバックアップする場合は、次のいずれかを行う必要があります。

  • 使用されているすべてのパーティション(/dev/vdXY)をファイルにダウンロードします。パーティションは、どこかにマウントされるときに使用されます。
  • 使用済みのすべてのディスク(/dev/vbX)をファイルにダウンロードします。ディスクは、使用済みパーティションが少なくとも1つ含まれている場合に使用されます。

言い換えれば、次のいずれかを実行できます。

ssh user@remote "dd if=/dev/vda | gzip -1 -" | dd of=disk1.gz
ssh user@remote "dd if=/dev/vdb | gzip -1 -" | dd of=disk2.gz
# ... and so on, once per used disk.

または(上記の2ディスクの例を使用):

ssh user@remote "dd if=/dev/vda1 | gzip -1 -" | dd of=root.gz
ssh user@remote "dd if=/dev/vda2 | gzip -1 -" | dd of=var.gz
ssh user@remote "dd if=/dev/vdb1 | gzip -1 -" | dd of=home.gz
# ... and so on, once per used partition.

パーティションを個別にバックアップすることの利点は、必要に応じてローカルでパーティションを探索する方が簡単な場合があることです。

$ gzip -d home.gz                        # decompress the backup
$ Sudo mkdir /mnt/home_bak               # create a mount point
$ Sudo mount -o loop home /mnt/home_bak  # mount the backup
$ cd /mnt/home_bak                       # explore the home backup

最後に、lsblkはマウントされたパーティションのみを一覧表示することに注意してください。追加のパーティション(起動時に自動的にマウントされないパーティション)をセットアップした場合は、それらを含めることを忘れないでください。 VPSをインストールするときにそれを行ったかどうかを覚えている可能性があります。

1
John WH Smith