Rsync -avzHP mengikuti hardlink alih-alih menyalinnya sebagai hardlink

13

Saya menggunakan rsnapshot untuk membuat backup per jam "harian" / harian / mingguan / bulanan saya. Sekarang saya mencoba menyalin seluruh direktori cadangan ke drive eksternal menggunakan rsync.

Saya menggunakan perintah / parameter ini dalam sesi layar (ya, rsync-exclude.txt terletak di direktori tempat saya menjalankan perintah)

rsync -avzHP --exclude-from 'rsync-exclude.txt' /share/backup/ /share/eSATADisk1/backup/;

Semuanya berjalan pada QNAP TS-439, drive internal adalah disk tunggal (tanpa RAID) diformat EXT4, drive eksternal diformat EXT3.

Yang terjadi adalah: Rsync mengikuti setiap hardlink dan menyalin file yang sebenarnya alih-alih membuat ulang hardlink yang diperbarui pada drive eksternal. Saya tidak langsung mengenali hal ini sehingga drive eksternal tersebut akhirnya dibuang dengan xxx file yang sama.

Yang ingin saya capai adalah: Menyalin seluruh struktur file yang dihasilkan oleh rsnapshot ke drive eksternal menjaga hardlink untuk menghemat ruang. Catatan: Ini tidak harus dilakukan dengan menggunakan rsync.

Terima kasih atas ide dan waktu Anda. Saya menghargai bantuan Anda, waktu besar.

Pembaruan: Saya belajar, bahwa rsnapshot tidak menggunakan symlink, itu menggunakan hardlink jadi saya sekarang menggunakan opsi -H yang seharusnya mempertahankan struktur hardlink menurut Rsnapshot ke beberapa tujuan (atau mempertahankan struktur tautan keras) tetapi masih tidak akan berfungsi ... Apa yang kulewatkan di sini?

Pembaruan 2: Saya menemukan pendapat / pernyataan lain tentang topik ini di sini: rsync dengan --hard-links membekukan Steven Monday menyarankan untuk tidak mencoba rsync struktur file besar yang mengandung hardlink, karena ia menyerap banyak memori dan merupakan tugas yang sulit untuk rsync. Jadi mungkin solusi yang lebih baik adalah membuat .img dari struktur data yang saya coba backup. Bagaimana menurut anda?

woerndl
sumber
Saya melakukan hal yang sama persis seperti Anda! +1. Akan mencoba pendekatan dd
mmalmeida

Jawaban:

10

Opsi rsyncperintah -H(atau --hard-links) akan, secara teori, melakukan apa yang ingin Anda capai, yaitu, secara singkat: untuk membuat salinan sistem file Anda yang mempertahankan struktur tautan keras dari dokumen asli. Seperti yang saya sebutkan dalam jawaban saya untuk pertanyaan serupa lainnya , opsi ini pasti gagal setelah sistem file sumber Anda tumbuh melampaui ambang batas kompleksitas hard link.

Lokasi tepat ambang itu mungkin tergantung pada RAM Anda dan jumlah total tautan keras (dan mungkin beberapa hal lain), tetapi saya telah menemukan bahwa tidak ada gunanya mencoba mendefinisikannya dengan tepat. Yang benar-benar penting adalah bahwa ambang batas terlalu mudah untuk dilewati dalam situasi dunia nyata, dan Anda tidak akan tahu bahwa Anda telah melewatinya, sampai tiba saatnya Anda mencoba menjalankan rsync -aHatau cp -ayang berjuang dan akhirnya gagal .

Apa yang saya sarankan adalah ini: Salin sistem file Anda yang sangat sulit ditautkan sebagai satu unit, bukan sebagai file. Yaitu, salin seluruh partisi sistem file sebagai satu gumpalan besar. Ada sejumlah alat yang tersedia untuk melakukan ini, tetapi yang paling umum adalah di mana-mana dd.

Dengan firmware bawaan, QNAP NAS Anda seharusnya sudah ddterintegrasi juga fdisk. Dengan fdisk, buat partisi di drive tujuan yang setidaknya sama besar dengan partisi sumber. Kemudian, gunakan dduntuk membuat salinan yang tepat dari partisi sumber Anda di partisi tujuan yang baru dibuat.

Ketika ddsalinan sedang dalam proses, Anda harus memastikan bahwa tidak ada perubahan dalam sistem file sumber, jangan sampai Anda berakhir dengan salinan yang rusak di tujuan. Salah satu cara untuk melakukannya adalah ke umountsumber sebelum memulai proses penyalinan; cara lain adalah memasang sumber dalam mode read-only.

Steven Monday
sumber
Misalkan saya tidak pernah menggunakan tautan keras di luar direktori backup rsnapshot, apakah saya masih akan mendapat masalah? Saya benar-benar kekurangan ruang hard disk tetapi ingin membuat backup rsnapshot. Saat ini disk saya sudah penuh.
Sridhar Sarnobat
Saya pikir saya menekan situasi yang Anda tunjukkan. Saya memiliki direktori cadangan dengan banyak foto yang dibuat dengan rsync. Ini memiliki banyak file dengan banyak tautan keras. Total penggunaan disk adalah sekitar 200G. Saya menyalinnya ke partisi lain menggunakan 'rsync -avH'. Tetapi setelah 4 (atau 5?) Hari dan malam, proses penyalinan masih berjalan. Saya kira rsync benar-benar bingung dengan jumlah total tautan keras di direktori sumber.
Guangliang
Di Ubuntu 18.04 itu --hard-links(dengan 's').
Nobar
1

-l adalah untuk symlink, mengapa ia melakukan apa saja untuk hardlink?

(Maaf ini adalah jawaban dan bukan komentar, saya belum memiliki hak komentar dan jawaban ini membutuhkan jawaban)

Catatan lain yang harus menjadi komentar: apakah ini semua perangkat keras asli atau apakah Anda menggunakan VM, pemasangan jaringan?

Edit

abaikan komentar saya sebelumnya tentang mengapa Anda menggunakan hardlink, saya ketinggalan rsnapshotkomentar.

Akan sangat membantu untuk memiliki tes yang pertama menguji rsync antara dua direktori lokal disk lokal, kemudian terhadap disk jarak jauh Anda. Tes kecil ini menunjukkan -Hopsi wokrs seperti yang diharapkan. The -ipilihan untuk lsmenunjukkan inode, sehingga menunjukkan bahwa link telah diawetkan, dengan tidak ada salinan tambahan.

$ rsync -avzHP src/ dest
sending incremental file list
created directory dest
./
file111_prime.txt
           9 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/3)
file111.txt => file111_prime.txt

sent 156 bytes  received 59 bytes  430.00 bytes/sec
total size is 18  speedup is 0.08

$ ls -liR
.:
total 8
414044 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 dest
414031 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 src

./dest:
total 8
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

./src:
total 8
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

Tes selanjutnya rsync -avzHP src/ host:/tmpke host jarak jauh masih mempertahankan hardlink

nhed
sumber
Anda sepenuhnya benar, setelah beberapa penelitian lebih lanjut saya menemukan bahwa rsnapshot tidak menggunakan symlink tetapi hardlink. Saya memperbarui pertanyaan saya sesuai. Jadi solusinya harus menggunakan -H dan menyalin seluruh direktori (seperti yang saya lakukan) untuk melestarikan struktur hardlink yang dibangun oleh rsnapshot tetapi masih tidak berfungsi. Ketika saya mulai menyalin segala sesuatu dari daily.0 semakin disalin, bukan hanya file yang diubah. // Dan ya, saya menggunakan Qnap TS-439 dan Drive Lacie eksternal untuk operasi ini.
woerndl
Bisakah Anda mengurangi masalah ini dengan memiliki dir sumber tes dan tujuan tujuan pengujian dengan hanya 2 file di sumber, yang di-link bersama? Juga, bagaimana Anda menentukan bahwa tautan tidak ditangani dengan benar dan terakhir, mengapa menggunakan tautan keras, jika Anda membaca teks panjang untuk -Hdi manual Anda dapat melihat bahwa ada beberapa peringatan, yang bagi saya akan mengatakan, coba, untuk menjauh dari hardlink ...
nhed
Saya akan menyiapkan test case dan memberi Anda informasi terbaru. Terima kasih banyak atas ide Anda sejauh ini.
woerndl
1

Ini adalah pukulan panjang, tetapi jika Anda tidak dapat menemukan solusi lain saya sarankan mencoba memformat drive USB sebagai EXT4. Mungkin ini masalahnya: https://bugzilla.samba.org/show_bug.cgi?id=7670

Diberi cukup tautan keras di folder sumber dan volume tujuan yang cukup kecil, menyalin dengan rsync --hard-tautan bisa gagal. Rsync gagal dengan melelahkan jumlah maksimum tautan keras di tujuan <...> masalah sebenarnya bukan rsync melainkan sistem file yang mendasarinya.

Motsel
sumber
Terima kasih atas partisipasi Anda dalam masalah saya! Sepertinya ini terkait samba. Drive saya terhubung langsung ke NAS.
woerndl
1
Halo, tidak ada masalah yang tidak berhubungan dengan Samba. Ini adalah rumah situs web rsync: rsync.samba.org
Motsel
0

Sudahkah Anda mencoba menambahkan -lopsi?

Saya tahu halaman manual mengatakan bahwa itu termasuk -atetapi halaman manual tidak selalu 100% akurat.

Ladadadada
sumber
Terima kasih atas tanggapan Anda. Saya harus memperbarui pertanyaan saya: Rsnapshot tidak menggunakan symlink tetapi hardlink untuk membangun struktur cadangan tambahannya. Jadi -aku tidak akan membantu, tapi -H harus, yang sayangnya juga tidak berhasil.
woerndl