rsync:シンボリックリンクを通常のファイルにコピーする

rsync:シンボリックリンクを通常のファイルにコピーする

すでに重要なデータがたくさんあるドライブに、さまざまなファイルを含む大容量ディレクトリをコピーする必要があります。

削除されたシンボリックリンクをコピーしたいのですが、ドライブはexfatでシンボリックリンクをサポートしていません。ファイルにはすでに多くのデータが含まれているため、そのデータをシンボリックリンクをサポートする形式にフォーマットするために転送する必要はありません。

rsyncを使って次のシンボリックリンクを読む方法はありますか?

/etc/apache2/sites-enabled/mysite.conf -> ../sites-available/mysite.conf

次の一般的なファイルを生成します。

<rsync-destination>/etc/apache2/sites-enabled/mysite.conf.rsync-munged

テキストが含まれています

../sites-available/mysite.conf

私はrsyncに組み込まれているか、bashパイプラインで実行されるソリューション、または少なくともLinux上の基本ツールの一部を好みますが、rsync機能+この機能を提供する他のソフトウェアにもオープンです。

編集する:

私はrsyncがそのようなことをすることができないことを知りました。これを手動で行う方法を見つけたようです。

シンボリックリンクを除くすべてをrsyncしてから、別の検索操作を実行してソース内のすべてのシンボリックリンクを識別し、bashスクリプトを使用して手動で生成します。

stdioからシンボリックリンクデータを手動で抽出する必要がありますが、どうすればよいかわかりません。 ls -l より多くのデータがあると邪魔になります。

答え1

欲しいものは直接可能ではありません。

  • シンボリックリンクをサフィックス名を持つファイルに変換することはできません。munged
  • シンボリックリンクを通常のファイル()に変換できますが、--fake-superそれに関連するメタデータ(シンボリックリンクに再変換可能)はexFATファイルシステムに保存できません。

その他の可能性

  • この--munge-linksオプションはシンボリックリンクをシンボリックリンクとして保持しますが、シンボリックリンクの値を変更してターゲットシステムで無効にします。 exFATファイルシステムには役に立ちません
  • --copy-linksを使用してシンボリックリンクを物理ファイルに拡張できます。これは、シンボリックリンク情報が失われ、データがソースシステムに返されたときに再構成できないため、望ましくない可能性があります。

私が見ることができる唯一の他の解決策は、デフォルトのLinuxファイルシステムとしてマウントできる大きなファイルをターゲットシステムに作成することです。その後ext4、そのファイルシステムにバックアップを送信し、exFAT以上の追加機能を利用できます。セット。

答え2

rsync 汎用ファイルを作成し、すべてのリンクを個別に検索し、1 つのファイルにリストし、すべてのリンク ファイルを 1 つずつ作成します。

#!/bin/bash
$SRCDIR="/backup/";
$SRCSERVER="[email protected]";
$DEST=".";
rsync -rtpEv "$SRCSERVER:$SRCDEST" $DEST;
ssh SRCSERVER "stat -c %N \`find $SRCDIR -type l\` 2> /dev/null" > links;
$MUNGED = ".munged";

while read p; do                                                                                                                                                                                                     
    file=$(echo $p | awk -F ' ' '{print $1}' | sed "s/^\`/;s/'$//");                                                                                                                                                  
    dest=$(echo $p | awk -F ' ' '{print $3}' | sed "s/^\`//;s/'$//");                                                                                                                                                  
    echo $dest > "$file$MUNGED";
done < links;                                                                                                                                                                                      

(私のbashの構文がわからないので、基本的にこれをすべて手動で実行しました)

答え3

ファイルを直接読んだり変更したりする必要がなく、完全に復元できる場合は、簡単な解決策はそのファイルをアーカイブすることですtar


バックアップから直接ファイルを読み取る必要はありませんが、バックアップを更新したいとディスクに空き容量がある場合は、次のことができます。データをアーカイブします。ボーナスで以前のバージョンを復元できます。

cd /path/to/back/up
git init .
git commit -a
git clone --bare .git /media/external-disk/my-site.git

Gitはシンボリックリンクを保存しますが、権限は保存しません。ファイルの権限が重要な場合は、次のものを使用できます。マネージャーをお待ちください。 Git(または他のバージョン管理システム)を中心に戻り、ファイルメタデータを別のファイルに保存します。


Linux以外のシステムでこれらのファイルにアクセスする必要がなく、全体のサイズを正確に推定できる場合は、ext4ファイルシステムイメージを作成してループの取り付けそれ。事前準備作業は次のとおりです。

truncate -s 42G /media/external-disk/linux.fs
mkfs.ext4 -F /media/external-disk/linux.fs

次に、ファイルシステムイメージを使用します。

sudo mkdir /media/external-linux
sudo mount -o loop /media/external-disk/linux.fs /media/external-linux
sudo rsync -ax / /media/external-linux/my-site-backup
sudo umount /media/external-linux

1つの可能なアプローチは、ファイルシステム階層で別々のファイルを使用して、基本ファイルシステムでサポートされていないメタデータを保存することです。 [Upfs](試してみることができますUPFS、実際にそうです。しかし、残念ながら維持されません。

(非常にずっと前に、ウムストスとても人気があります。シンボリックリンク、権限、8文字より長いファイル名、3文字の拡張子などをサポートしていないFATファイルシステムにLinuxファイルを保存できます。残念ながら、FAT32またはexFatと互換性がありません。 )

関連情報