sshとtarを使用して、Linuxルートファイルシステム全体を新しいハードドライブにコピーする方法


18

Linuxのルートファイルシステム全体を、障害のあるハードドライブから、使用可能な開いたパーティションがある別のコンピューターに転送する必要があります。これにはとが関係しているtarと確信sshしていますが、これを行う方法を正確に思い出すことはできません。

私はおそらく、新しい/ターゲットホストでライブcdを使用して、次のようなものを実行することをイメージングしています。

ssh user@failingharddrivehost "some tar command | piped into something else"


オフトピック。プログラミングの質問ではありません。試してくださいssh user@failingsys "tar cfz - /" > oldsys.tar.gz

/ dev /をtarしないように注意してください(例/ dev / random、/ dev / sdX、...)。同上/ proc /
ヘネス

回答:


19

rsyncを使用します。新しいホストから、次を使用できます

rsync -avP --numeric-ids --exclude='/dev' --exclude='/proc' --exclude='/sys' root@failedharddrivehost:/ /path/to/destination/

壊れたファイルがあると動作しない可能性があるため、tarのようなものを使用しようとはしません。


上記でetagenkloと@Hennesが説明したように、rsyncを使用してしまいました。移行はうまくいきました。grubを修正する必要がありますが、それは悪くないはずです。
CHK

8
acl、xattrs、およびハードリンクを保持するために、rsyncにもフラグとして-AHXを追加して、元のfsのより正確なコピーを作成します。
アレクサンダーレメシュ16

5
ルートファイルシステムにないアイテムを無視するために-xを追加します。その後、さまざまなパスの--exclude引数をスキップできます。
アレックス

4

両方のコンピューターが同じ(安全な)LAN上にある場合、を使用する別のアプローチをお勧めしnetcatます。これは、データを暗号化しないため、通常ははるかに高速です。

root@good_host$ cd good_partition; netcat -l -p 1234 | tar xvpmf -
root@bad_host$ tar -cv -f- --exclude=/proc --exclude=/sys / | netcat good_host.ip 1234

良好なマシンでリスニングポート1234を開きnetcat -l -p 1234、受信データをパイプしtarて抽出します(mtimeと権限を保持します)。不良ホストは、とも使用してtar、このポートにデータを送信しますnetcat。私はいくつか含まれ--exclude、パラメータのように/procして/sys新しいホスト上の仮想ファイルシステム、ひいては無用です。(特に(/proc/kcore)のRAMを表すファイルは、不必要な量のデータを追加します)。

ただし、dd障害のあるドライブのパーティションのダンプを作成することも検討する必要があります。

user@good_host$ cd good_partition; netcat -l -p 1234 > dump_of_bad_partition_1.dd
root@bad_host$ dd if=/dev/sda1 | netcat good_host.ip 1234

/dev/sda1適切なデバイスを採用する必要がありました。障害のあるドライブ上の他のパーティションでも同様に行います。

そのダンプを使用すると、tarキャプチャされない重要なメタデータ(ACLなど)を見逃したことはありません。


3

除外するディレクトリと組み合わせるのはなぜですか?同じデバイスを別のディレクトリにマウントすることをお勧めしませんか?最新のカーネルではこの方法が許可されています。たとえば、マウントした

/ dev / sda1 as / then do:mkdir / CLEANROOT mount / dev / sda1 / CLEANROOT

この後:/ dev / sda1 as / / dev / sda1 as / CLEANROOT

これは2つの場所で表示される同じファイルシステムですが、/ CLEANROOTには追加マウントがありません。次に、除外なしで/をコピーする代わりに、除外なしでtarまたはrsync / CLEANROOTを実行できます。

もちろん、いくつかのデータパーティションがある場合は、別のデータパーティションをコピーする必要があります。

パーティションのコピーは、サーバー回復の最初のステップです。別の方法は、ブートセクタを再生成することです。Usefullは、インストール/レスキューCDまたはペンドライブから起動する場合のレスキューモードです。


1

障害のあるホストに物理的にアクセスできますか?

その場合、ライブCDから起動します。次に使用します:

  • dump (パーミッションを含むファイルシステム全体をダンプ/復元します)。
  • / devを除いたTar。これを、std_outへの出力およびnetcatを介したパイピングと組み合わせることができ
    ますtar --exclude='/dev'。除外構文は次のとおりです。
  • または、同じ除外を指定したrsync。例えば
    rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • または、次のようにddを使用します
    nc -l 4242 | gunzip | cat > my_full_disk_backup_of_PC_named_foo
    dd if=/dev/sda of=- bs=1M | gzip | nc -p 4242 name_of_the_destination

ライブCDから起動できない場合、上記のソリューションのほとんどは同じままですが、次のようになります。

  1. 一部のファイルは使用中またはロックされている可能性があります。
  2. / dev /だけでなく、/ proc /も除外するようにしてください。
    例えばtar --exclude='/dev' --exclude='/proc'

はい、両方のホストに物理(およびルート)アクセスできます。rsyncを試してみます。不明な理由で、失敗したボックスのnetcatがクラッシュしました。ターゲットファイルシステムはマウントされたくない。次のように失敗します #mount /dev/sda1 /mnt/fedora mount: unknown filesystem type 'LVM2_member'
。– CHK


0

rsyncの使用を検討する必要があります

follwoingコマンドは2つのことを想定しています。

  1. 障害のあるハードドライブがあるシステム上にいる
  2. 新しいパーティションには、sshが有効になっている最小のLinuxインストールがあります。

rsync / new_partition:/wherever/you/want/

注:末尾の/は重要です。そうでない場合、ファイルは1つ上のディレクトリレベルに配置されます


OPはおそらく、データを別のコンピューターに転送する必要があるため、時間、所有権、シンボリックリンク(およびACL)など、およびパラメーターを保持するため、-aパラメーター(およびおそらく-A)を使用します-e ssh。だからrsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint
mpy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.