Latar Belakang
Aku berlari keluar dari ruang pada /home/datadan kebutuhan untuk mentransfer /home/data/repoke /home/data2.
/home/data/repoberisi 1M dir, yang masing-masing berisi 11 dir dan 10 file. Totalnya 2TB.
/home/dataaktif pada ext3 dengan dir_index diaktifkan.
/home/data2ada di ext4. Menjalankan CentOS 6.4.
Saya menganggap pendekatan ini lambat karena fakta bahwa repo/1 juta dir langsung di bawahnya.
Percobaan 1: mvcepat tetapi terganggu
Saya bisa melakukannya jika ini selesai:
/home/data> mv repo ../data2
Tapi itu terputus setelah 1.5TB ditransfer. Itu menulis sekitar 1GB / menit.
Percobaan 2: rsyncmerangkak setelah 8 jam membuat daftar file
/home/data> rsync --ignore-existing -rv repo ../data2
Butuh beberapa jam untuk membangun 'daftar file tambahan' dan kemudian transfer pada 100MB / menit.
Saya membatalkannya untuk mencoba pendekatan yang lebih cepat.
Percobaan 3a: mvmengeluh
Mengujinya pada subdirektori:
/home/data/repo> mv -f foobar ../../data2/repo/
mv: inter-device move failed: '(foobar)' to '../../data2/repo/foobar'; unable to remove target: Is a directory
Saya tidak yakin apa ini kesalahan tentang, tapi mungkin cpbisa menyelamatkan saya ..
Percobaan 3b: cptidak berhasil setelah 8 jam
/home/data> cp -nr repo ../data2
Bunyinya disk selama 8 jam dan saya memutuskan untuk membatalkannya dan kembali ke rsync.
Percobaan 4: rsyncmerangkak setelah 8 jam membuat daftar file
/home/data> rsync --ignore-existing --remove-source-files -rv repo ../data2
Saya dulu --remove-source-filesberpikir mungkin akan lebih cepat jika saya mulai membersihkan sekarang.
Dibutuhkan setidaknya 6 jam untuk membangun daftar file kemudian transfer pada 100-200MB / menit.
Tetapi server terbebani semalaman dan koneksi saya ditutup.
Percobaan 5: HANYA ADA 300GB KIRI UNTUK PINDAHKAN MENGAPA INI SANGAT BERLAKU
/home/data> rsync --ignore-existing --remove-source-files -rvW repo ../data2
Terganggu lagi. The -Whampir tampaknya membuat "mengirimkan daftar file tambahan" lebih cepat, yang pemahaman saya tidak harus masuk akal. Bagaimanapun juga, transfernya sangat lambat dan saya menyerah untuk yang ini.
Percobaan 6: tar
/home/data> nohup tar cf - . |(cd ../data2; tar xvfk -)
Pada dasarnya berusaha untuk menyalin ulang semuanya tetapi mengabaikan file yang ada. Itu harus mengarungi 1,7TB file yang ada tetapi setidaknya itu membaca di 1.2GB / menit.
Sejauh ini, ini adalah satu-satunya perintah yang memberikan kepuasan instan.
Pembaruan: terputus lagi, entah bagaimana, bahkan dengan nohup ..
Percobaan 7: harakiri
Masih memperdebatkan yang ini
Percobaan 8: dituliskan 'bergabung' dengan mv
Dir tujuan memiliki sekitar 120rb kosong, jadi saya berlari
/home/data2/repo> find . -type d -empty -exec rmdir {} \;
Skrip Ruby:
SRC = "/home/data/repo"
DEST = "/home/data2/repo"
`ls #{SRC} --color=never > lst1.tmp`
`ls #{DEST} --color=never > lst2.tmp`
`diff lst1.tmp lst2.tmp | grep '<' > /home/data/missing.tmp`
t = `cat /home/data/missing.tmp | wc -l`.to_i
puts "Todo: #{t}"
# Manually `mv` each missing directory
File.open('missing.tmp').each do |line|
dir = line.strip.gsub('< ', '')
puts `mv #{SRC}/#{dir} #{DEST}/`
end
DIBUAT
mvkembali saja ? Secara teori, mvhanya akan menghapus file sumber jika file tujuan telah sepenuhnya disalin sehingga harus bekerja dengan baik. Juga, apakah Anda memiliki akses fisik ke mesin atau apakah ini dilakukan melalui sshkoneksi?
mvtidak memaafkan, jika Anda terus terputus Anda bisa kehilangan data dan bahkan tidak mengetahuinya. Seperti yang Anda katakan Anda lakukan ini ssh, saya sangat merekomendasikan menggunakan screendan melepaskan. Aktifkan pencatatan dan lacak seperti itu. Jika Anda menggunakan verbose, itu hanya akan memakan waktu lebih lama. Coba jugaiotop
screen. Saya bertanya-tanya tentang verbose tapi saya kira sudah terlambat untuk memulai kembali tarsekarang. Dan iotoptelah menjadi utilitas favorit saya selama beberapa hari terakhir :)