障害のあるハードドライブからLinuxのルートファイルシステム全体を、使用可能なパーティションが開いている別のコンピューターに転送する必要があります。これにはtar
とssh
が関係していると確信していますが、これを行う方法を正確に思い出せません。
新しい/ターゲットホストでライブCDを使用して実行しているsomethingを実行して、次のようにイメージングしています。
ssh user@failingharddrivehost "some tar command | piped into something else"
Rsyncを使用します。新しいホストから使用できます
rsync -avP --numeric-ids --exclude='/dev' --exclude='/proc' --exclude='/sys' root@failedharddrivehost:/ /path/to/destination/
壊れたファイルがあると動作しない可能性があるため、tarのようなものは使用しないでください。
両方のコンピューターが同じ(安全な)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など)を見逃していないことは確かです。
なぜディレクトリ除外と組み合わせるのですか?同じデバイスを別のディレクトリにマウントした方がいいでしょうか?最近のカーネルではこの方法が可能です。たとえば、あなたはマウントしました
/ dev/sda1を/として実行します:mkdir/CLEANROOT mount/dev/sda1/CLEANROOT
この後:/ dev/sda1 as// dev/sda1 as/CLEANROOT
これは2つの場所から見える同じファイルシステムですが、/ CLEANROOTには追加のマウントがありません。次に、除外せずに/をコピーするか、除外して/ syncでtarまたはrsyncを実行できます。
もちろん、いくつかある場合は、別のデータパーティションをコピーする必要があります。
パーティションのコピーは、サーバー回復の最初のステップです。もう1つは、ブートセクターの再生成です。それ以外の場合、システムはコピーされたディスクからブートしません。インストール/レスキューCDまたはペンドライブから起動する場合、Usefullはレスキューモードです。
障害のあるホストに物理的にアクセスできますか?
その場合は、ライブCDから起動します。次に使用します:
tar --exclude='/dev'
。rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
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から起動できない場合、上記のソリューションのほとんどは同じままですが、次のようになります。
tar --exclude='/dev' --exclude='/proc'
tar
およびssh
を使用してファイルをコピーする方法の説明は次のとおりです。 基本的に、ローカルにコピーするかどうかに応じて、次のいずれかを実行します- >リモートまたはリモート->ローカル:
tar cf - files... | ssh remotehost -c 'cd /destination && tar xvf -'
ssh remotehost -c 'cd /destination && tar cf - files' | tar xvf -
あなたはrsyncの使用を検討する必要があります
次のコマンドは2つのことを前提としています。
rsync / new_partition:/wherever/you/want/
注:末尾の/は重要です。それ以外の場合、ファイルは1つ上のディレクトリレベルになります。