web-dev-qa-db-ja.com

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

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

新しい/ターゲットホストでライブCDを使用して実行しているsomethingを実行して、次のようにイメージングしています。

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

18
CHK

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

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

壊れたファイルがあると動作しない可能性があるため、tarのようなものは使用しないでください。

19
etagenklo

両方のコンピューターが同じ(安全な)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
_

これにより、適切なマシン_netcat -l -p 1234_のリスニングポート1234が開き、受信データがtarにパイプされて抽出されます(mtimeと権限を保持)。不良ホストは、tarおよびnetcatも使用して、このポートにデータを送信します。 _--exclude_および_/proc_は仮想ファイルシステムであるため、新しいホストでは役に立たないため、いくつかの_/sys_パラメータを含めました。 (特に、あなたのRAM in(_/proc/kcore_)を表すファイルは、不必要な量のデータを追加します)。

ただし、(また)失敗したドライブのパーティションの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など)を見逃していないことは確かです。

4
mpy

なぜディレクトリ除外と組み合わせるのですか?同じデバイスを別のディレクトリにマウントした方がいいでしょうか?最近のカーネルではこの方法が可能です。たとえば、あなたはマウントしました

/ dev/sda1を/として実行します:mkdir/CLEANROOT mount/dev/sda1/CLEANROOT

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

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

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

パーティションのコピーは、サーバー回復の最初のステップです。もう1つは、ブートセクターの再生成です。それ以外の場合、システムはコピーされたディスクからブートしません。インストール/レスキューCDまたはペンドライブから起動する場合、Usefullはレスキューモードです。

3
Znik

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

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

  • dump (許可を含むファイルシステム全体をダンプ/復元します)。
  • Tar /devを除く。これを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'
1
Hennes

tarおよびsshを使用してファイルをコピーする方法の説明は次のとおりです。 基本的に、ローカルにコピーするかどうかに応じて、次のいずれかを実行します- >リモートまたはリモート->ローカル:

tar cf - files... | ssh remotehost -c 'cd /destination && tar xvf -'

ssh remotehost -c 'cd /destination && tar cf - files' | tar xvf -
1
Kenster

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

次のコマンドは2つのことを前提としています。

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

rsync / new_partition:/wherever/you/want/

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

0
MelBurslan