web-dev-qa-db-ja.com

ルートのコピーに関するcpの問題

システムが今日バックアップされているかどうかを確認する小さなbashスクリプトがあり、バックアップされていない場合は、ファイルシステム全体をバックアップフォルダーにコピーします。

date=$(date +"%m%d%y")
Sudo mkdir -p "/backups/system/$date"
Sudo cp -r "/" "/backups/system/$date"

私の問題は、これを入力すると、次のエラーが表示されることです。

cp: error reading ‘/proc/1/task/1/mem’: Input/output error
cp: failed to extend ‘/backups/system/040315/proc/1/task/1/mem’: Input/output error
cp: error reading ‘/proc/1/task/1/clear_refs’: Invalid argument
cp: failed to extend ‘/backups/system/040315/proc/1/task/1/clear_refs’: Invalid argument
2
Demosthenes

Linuxではすべてがファイルです

(つまり、バックアップできるという意味ではありません)

技術的にはすべてがファイルではありません(私は専門家ではありません)。ただし、一部のフォルダーは、実際のフォルダーではないという意味で特別です。 /procはそのうちの1つです。ランタイムファイル情報を含む仮想ファイルシステムです 。つまり、システムの実行に応じてその内容は変化し続けます。バックアップしようとしないでください。

他のそのようなフォルダーは/sys/mnt/media/runおよび/devです。 /sys like /procは、実行中のカーネルの変数にウィンドウを提供する別の仮想ファイルシステムです。したがって、それらをバックアップまたは復元しようとする必要はありません。 /devudevによってコンテンツが動的に作成および削除されるtmpfsであるため、これをバックアップまたは復元する必要もありません。同様に、/runは、バックアップする必要のない実行中のシステムに関する変数を保持するtmpfsです。この段落は Backup Your System/TAR から変更されています。

一般に、/をコピーすることはお勧めできません。 /backups/system/$date/の一部でもあることに注意してください。そのため、王国が来るまでバックアップを焼くか、ディスク容量が不足する可能性があります。

お役に立てれば

7
user68186

それらを無視します。 /procからファイルをコピーしようとしていますが、これは見たとおり無意味で動作しません。これらは基本的にOSによって作成されたランタイムファイルです。そのようなファイルのバックアップを作成する必要や理由はありません。

したがって、単純なアプローチはエラーを無視することです。エラー出力を/dev/nullにリダイレクトすることで、表示を停止することもできます。

Sudo cp -r / "/backups/system/$date" 2>/dev/null

より洗練されたアプローチは、コピーするディレクトリを指定することです。例えば:

Sudo cp -r /lib /usr /mnt /bin /opt /lib64 /tmp /home /sbin /media /etc /root  /boot /var "/backups/system/$date"

それらはあなたが気にするものです。おそらく/mnt/mediaも必要ないでしょう。

2
terdon