Saya memiliki sistem file untuk perangkat yang saya pemrograman yang ingin saya buat salinannya. Idealnya saya ingin salinan ini identik dengan folder tempat penyalinannya. Saya telah mencoba menggunakan cp -r
cp -a
dan rsync -azvP
mencoba mencapai ini. Masing-masing menghasilkan folder dengan ukuran berbeda (menggunakan du -s
) dan pada akhirnya, meskipun perangkat saya lari dari folder asli, itu tidak akan lari dari yang saya salin.
- Apa yang ditinggalkan bahwa perintah yang saya gunakan tidak memperhitungkan?
- Apakah mungkin untuk menjaga semuanya tetap identik saat menyalin sistem / folder file? Jika demikian, bagaimana saya akan melakukan itu?
PS Saya memposting pertanyaan serupa di StackOverflow tetapi segera menyadari saya telah menanyakannya di bursa yang salah
Sunting: Ini mungkin tidak membantu tetapi tidak peduli metode mana yang saya gunakan pada direktori yang disalin selalu menyebabkan mesin tersebut menjadi Kernel Panic dengan output berikut.
VFS: Tidak dapat me-mount root fs via NFS, mencoba floppy. VFS: Tidak dapat membuka perangkat root "nfs" atau blok tidak dikenal (2,0) Harap tambahkan opsi boot "root =" yang benar; di sini adalah partisi yang tersedia: 1f00
64 mtdblock0 (driver?) 1f02 64 mtdblock2 (driver?) 1f04 2432 mtdblock4 (driver?) 1f05 128 mtdblock5 (driver?) 1f06 4352 mtdblock6 (driver?) 1f07 204928 mtdblock7 (driver?) mtdblock8 (driver?) 0800
8388608 sda driver: sd Kernel panic - not syncing: VFS: Tidak dapat me-mount root fs pada blok-tidak dikenal (2,0)
sumber
du
output bukanlah indikator bahwa isinya tidak sama.rsync -a
ataucp -a
lakukan salinan direktori yang tepat, tetapi Anda mencoba menyalin disk yang dapat di-boot, ada beberapa hal lagi yang perlu Anda lakukan untuk menyelesaikannya.dd if=/some/location of=/some/other/location bs=4M
membaca dan menulis data apa adanya.Jawaban:
Saya biasanya menggunakan salah satu alternatif berikut:
rsync -aHAX
(tambahkan v untuk verbositas) memastikan bahwa Anda mempertahankan struktur tautan dan x-attrs apa pun di folder target saat menyalin. Jangan lupaa
berarti mengarsipkan dan sudah menghemat waktu, kepemilikan, dan izin.tar cvf
(jangan mengompres untuk menghemat waktu, cukup tambahkan mereka) adalah apa yang saya gunakan jika yang pertama tidak memenuhi apa yang saya butuhkan untuk alasan apa pun dan saya tidak punya waktu, tetapi saya selalu mencoba yang pertama.Untuk memeriksa apakah semuanya berjalan sebagaimana mestinya, Anda dapat menjalankan
diff -r <folder1> <folder2>
setelahnya jika Anda mau.sumber
du -s
perbedaan. Saya biasarsync -axXSAH
menyalin semuanya. -X hanya akan menyalin dalam sistem file, dan bukan file yang dipasang dari sistem file lain.Membaca balasan Anda di komentar, sepertinya Anda mungkin mencoba menyalin folder root ("Perangkat saya tidak mau boot menggunakan direktori yang disalin"). Dalam hal ini ada beberapa hal yang harus Anda lakukan.
Setelah Anda menyalin folder root ke sistem baru, Anda perlu memperbarui grub sebelum boot.
sumber
tar c
kemudiantar x
. Kicker adalah untuk memastikan bahwa mesin saya mati sejak saya boot itu menggunakan FS yang lokal untuk mesin saya, tetapi jauh ke perangkat yang saya boot (saya memulai perangkat melalui NFS)grub-install: error: embedding is not possible, but this is required for cross-disk install.
Anda bisa mencoba FSArchiver . Ini adalah penerus dari partimage serupa, yang sekarang tidak terawat. Saya telah menggunakan keduanya partimage dan FSArchiver di masa lalu, dan mereka berdua bekerja dengan baik. Sejauh yang saya tahu, mereka berdua membuat salinan dari sistem file yang sedekat mungkin dengan aslinya. Saya pikir FSArchiver sedikit lebih kuat daripada partimage. Misalnya, ia bekerja dengan ext4, sedangkan partimage tidak. Lihat tabel perbandingan FSArchiver / partimage .
sumber
Menggunakan
du
untuk membandingkan folder pada dasarnya merepotkan. Jika Anda ingin benar-benar membandingkan 2 direktori berdasarkan ukurannya, gunakandu
seperti ini:Switch ini akan melaporkan ukuran aktual direktori vs. jumlah ruang disk yang dikonsumsi saat disimpan pada media drive fisik. Disk disusun dalam blok dan file ditulis ke blok ini. Jika sebuah file hanya membutuhkan ruang BLOCK + 1, ia akan menghabiskan ruang senilai 2 BLOCKS, dan inilah yang
du
biasanya dilaporkan. Ingat nama alat ini penggunaan disk!Mengingat Anda sedang berhadapan dengan apa yang terdengar seperti seluruh sistem file, saya akan cenderung menggunakan
dd
untuk membuat salinan yang tepat dari partisi tempat direktori berada.Anda kemudian dapat menggunakan ini
boot.img
untuk memulihkan partisi di mana pun Anda inginkan.sumber
du -sh /var
berikan 21G tetapidu -sh --apparent-size /var
berikan 209G pada sistem saya.Tergantung sedikit pada apa yang Anda maksud dengan "identik".
rsync
sebagian besar akan baik-baik saja. Kadang-kadang Anda ingin menggunakantar
untuk mengemas segala sesuatu dalam file dan mengekstraknya di tempat lain.dd
untuk menyalin seluruh sistem file itu sendiri.Jika Anda memiliki maksud untuk men-debug perangkat Anda, cobalah mencari tahu, apa sebenarnya masalah mengapa saat ini tidak lari.
sumber