Mempertahankan symlink tujuan yang ada dengan rsync

9

Saya menggunakan rsync (1) untuk memperbarui repositori debian lokal. Baru-baru ini, disk yang saya gunakan untuk menyimpannya mulai kehabisan ruang, jadi saya memutuskan untuk menggunakan symlink untuk memungkinkan saya memindahkan beberapa direktori ke disk berukuran serupa lainnya.

Sayangnya, tampaknya rsync menghapus symlink dan mengisi ulang disk yang hampir penuh. Setelah beberapa pencarian, saya menemukan --keep-dirlinksopsi untuk rsync, yang tampaknya dibuat khusus untuk memperbaiki masalah saya.

Hanya saja tidak. Symlink pada target masih terhapus.
Ini adalah perintah rsync saya:

rsync --recursive --keep-dirlinks --links --hard-links --times --verbose \
 --delete --delete-excluded $EXCLUDE $SOURCE_EXCLUDE \
 $RSYNC_HOST::$RSYNC_DIR/pool/ $TO/pool/

EXCLUDEs berkembang untuk menghilangkan sejumlah besar arsitektur yang saya tidak tertarik, di sepanjang baris --exclude binary-alpha/ --exclude disks-alpha .... Sebelum rsync diluncurkan, direktori pool saya terlihat seperti ini:

lrwxrwxrwx  1 root root   23 2014-09-22 13:58 contrib -> /u2/debian/pool/contrib
drwxrwxr-x 62 root root 4096 2012-04-09 03:02 main
lrwxrwxrwx  1 root root   24 2014-09-22 13:58 non-free -> /u2/debian/pool/non-free

Setelah rsync masuk, saya mendapatkan ini:

receiving incremental file list
deleting non-free
deleting contrib
./
contrib/
contrib/a/

Dan seterusnya, dan symlink diganti dengan direktori yang penuh dengan file.

Apakah beberapa opsi rsync lain mengganggu --keep-dirlinks? Mana yang tidak bisa saya gabungkan? Atau urutan urutan yang menyebabkan masalah saya?

unkilbeeg
sumber

Jawaban:

7

The --deletedan --delete-excludedpilihan mengganggu rencana Anda, karena mereka melihat bahwa symlink tidak ada pada sumber dan dengan demikian menghapusnya.

Ini hanya terjadi ketika Anda meminta rsyncuntuk menyalin seluruh direktori dengan source/ targetnotasi (garis miring setelah sumber). Jika Anda menggunakan source/* targetsebagai gantinya, shell akan memperluas daftar file dan direktori untuk disalin dan ini tidak akan terjadi (tapi coba --dry-rundulu).

Namun, alih-alih pengaturan yang rapuh ini, saya akan merekomendasikan untuk menggabungkan dua disk dengan bantuan LVM untuk membentuk satu volume besar yang tidak memerlukan tipuan semacam ini.

Sven
sumber
Terima kasih! Saya telah mengubah skrip dan sepertinya berfungsi. Ini akan memberi saya sedikit waktu - disk masih akan cenderung terisi, tetapi saya punya waktu untuk mengubah keadaan. Anda benar tentang menggabungkan keduanya dengan LVM. Aku sudah mempertimbangkannya, tetapi menyeret kakiku karena itu berarti memindahkan sesuatu dan kemudian menggerakkannya kembali. Lebih baik lebih cepat daripada nanti, kurasa.
unkilbeeg
Saya memiliki masalah serupa yang diselesaikan dengan menggunakan --keep-dirlinks tanpa opsi -a yang saya gunakan. Gangguan "minor" seperti pada paragraf ketiga, sistem file yang saya gunakan adalah disk "64 SAN". Meskipun ada kemungkinan bahwa kelipatan dapat digabungkan menjadi lebih besar, katakanlah 256 terabyte drive, saya berharap orang-orang admin memiliki alasan untuk ukuran yang kita miliki. Terkadang apa yang tampak seperti "tipu daya" hanyalah mencari cara untuk hidup dengan apa yang Anda miliki.
user1683793
Solusi utama saya adalah perangkat keras baru. Mesin asli sudah cukup tua untuk hanya mendukung drive IDE, dan drive terbesar yang bisa Anda dapatkan pada masa itu adalah 512G.
unkilbeeg