Latar Belakang
Aku berlari keluar dari ruang pada /home/data
dan kebutuhan untuk mentransfer /home/data/repo
ke /home/data2
.
/home/data/repo
berisi 1M dir, yang masing-masing berisi 11 dir dan 10 file. Totalnya 2TB.
/home/data
aktif pada ext3 dengan dir_index diaktifkan.
/home/data2
ada di ext4. Menjalankan CentOS 6.4.
Saya menganggap pendekatan ini lambat karena fakta bahwa repo/
1 juta dir langsung di bawahnya.
Percobaan 1: mv
cepat 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: rsync
merangkak 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: mv
mengeluh
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 cp
bisa menyelamatkan saya ..
Percobaan 3b: cp
tidak 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: rsync
merangkak setelah 8 jam membuat daftar file
/home/data> rsync --ignore-existing --remove-source-files -rv repo ../data2
Saya dulu --remove-source-files
berpikir 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 -W
hampir 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
mv
kembali saja ? Secara teori, mv
hanya 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 ssh
koneksi?
mv
tidak 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 screen
dan 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 tar
sekarang. Dan iotop
telah menjadi utilitas favorit saya selama beberapa hari terakhir :)