Apakah aman untuk mengambil gambar drive dari drive yang aktif saat ini?

12

Saya harus membuat cadangan hard disk saya. Saya ingin menggunakan dddan meletakkan gambar pada hdd eksternal.

  • Dapatkah saya melakukan ini menggunakan dddari OS yang berada di hdd itu sendiri atau apakah saya harus boot dari perangkat lain, misalnya LiveCD?
  • Apakah aman, secara umum, untuk mengambil gambar suatu perangkat, jika perangkat sudah terpasang dan berfungsi?
  • Bagaimana jika perangkat sudah terpasang, tetapi saya yakin tidak ada operasi I / O lainnya, saat ddsedang berjalan?

Saya yakin itu rsyncadalah alat terbaik untuk digunakan untuk cadangan, khususnya yang inkremental.

Tapi saya tertarik dd, karena saya ingin membuat cadangan juga perangkat penyimpanan lain, dan juga menyalin data yang disimpan di ruang yang tidak dipartisi. Sebagai contoh, pembaca e-book saya menggunakan ruang yang tidak dipartisi untuk menyimpan uboot, kernel dan data lainnya.

Marco Sulla
sumber
Adalah penting sistem file mana yang Anda gunakan, yang Anda minati? Beberapa memiliki fitur spesifik untuk tugas ini.
Vality

Jawaban:

11

Secara umum itu tidak aman. FS berasumsi bahwa operasi ditulis dalam urutan tertentu sehingga dapat menulis data file baru dan kemudian membuat pointer ke sana dari data lain, detail yang tepat tergantung pada sistem file. Bayangkan jika hal berikut terjadi:

  1. dd membaca dari lokasi X yang berisi sampah atau beberapa data
  2. Filesystem menulis ke lokasi X
  3. Filesystem menulis ke penunjuk lokasi X + 1 ke lokasi X
  4. dd membaca dari lokasi X + 1 tautan ke lokasi X

Dari sudut pandang cadangan Anda mendapatkan data sampah. Namun ada beberapa cara untuk mengatasinya:

  • Membekukan filesystem dengan perintah spesifik filesystem (saya percaya xfs_freezesatu dan saya tidak tahu yang lain - tetapi opsi seperti itu setidaknya ada dalam teori)
  • Buat snapshot lvm dan salin dari itu. Salinan akan seolah-olah Anda me-reboot komputer (minus penataan ulang HDD) sehingga akan menjadi sistem file yang kotor tetapi salinannya akan berupa atom. Perhatikan bahwa beberapa sistem file seperti XFS harus dibekukan terlebih dahulu.
  • Gunakan rsync seperti yang disarankan oleh orang lain. Sekarang salinannya aman dan Anda tidak perlu LVM tetapi salinannya tidak atom. Jadi sementara itu menghindari masalah di atas pada tingkat filesystem mungkin masih mengalami masalah dengan file (agak tidak mungkin tetapi orang dapat membayangkan file yang hilang sementara mv dieksekusi di latar belakang misalnya)
  • Gunakan filesystem dengan snapshot seperti btrfs , tux3 , zfs , nilfs ... Lalu Anda menghindari kedua masalah - Anda bisa membuat snapshot dan menyalinnya dengan rsync yang memiliki atomisitas penuh. Namun perlu dicatat bahwa sistem file seperti itu sering cenderung bersifat eksperimental.

Sebagai catatan terakhir - ddmungkin bukan cara cadangan terbaik. Ini menyalin disk penuh yang sering boros saat Anda menyalin 'sampah' juga. Jika Anda perlu memiliki disk image seperti partimage mungkin lebih baik. Jika Anda tidak memiliki pilihan yang lebih baik menggunakan rsync, tar dalam mode diferensial / incremental dll. Atau sistem cadangan lengkap seperti bacula , tarsnap atau salah satu dari banyak lainnya. Deduplikasi data mungkin sangat membantu untuk ukuran cadangan.

Maciej Piechotka
sumber
1
+1 Ini adalah satu-satunya jawaban yang benar-benar mencoba untuk menjawab pertanyaan ini, sangat baik dilakukan untuk benar-benar membaca apa yang ditanyakan op dan tidak mengomentari seberapa buruk itu.
Vality
+1 untuk jawaban yang bagus. Tapi saya tidak setuju dengan ocehan itu. Dd tidak buruk. Tidak tepat untuk ini dan menjelaskan mengapa itu adalah hal yang baik.
Hennes
Bullet point 4 memiliki batasan yang sama dengan # 2, kan? Sebuah aplikasi mungkin berada di tengah-tengah penerbitan penulisan, dan snapshot tidak tahu apa-apa tentang transaksi tingkat aplikasi.
Ben Voigt
Terima kasih, itu menjawab pertanyaannya. Jawaban goldilocks juga baik, tetapi saya tertarik untuk mencadangkan tidak hanya hdd saya tetapi juga perangkat penyimpanan lainnya, dan mungkin saya harus menulisnya sebelumnya.
Marco Sulla
@BenVoigt - sampai batas tertentu - ini menghilangkan satu layer (filesystem) dan AFAIK itu yang 'lebih rapuh'. Masih dalam beberapa kasus Anda dapat menemukan file setengah tertulis tetapi jika aplikasi tidak menanganinya file itu dapat rusak dalam banyak keadaan lain juga (OOM, crash, dll) sehingga aplikasi yang ditulis dengan benar harus menghadapinya.
Maciej Piechotka
7

Tergantung pada apa sebenarnya partisi ini, dan apa tujuan dari salinan tersebut. Namun, saya akan mengatakan bahwa secara umum ddadalah alat yang tidak sesuai untuk membuat cadangan sistem file . Itu juga tidak dimaksudkan untuk itu.

  • Ini akan menghabiskan banyak waktu untuk menyalin bagian kosong dari partisi.

  • Ini dapat menyebabkan inkonsistensi jika sistem file saat ini dipasang, sebagian karena itu adalah entitas tingkat OS dan mungkin tidak sinkron dengan perangkat blok yang mendasarinya. syncAwalnya menelepon tidak akan banyak membantu dengan ini, karena prosesnya tidak instan.

Gunakan cp -aatau rsyncsebagai gantinya. Anda kemudian perlu membuat partisi tujuan, tentu saja, sehingga tidak semudah drop-mati mudah, tetapi jauh lebih aman dan lebih fleksibel. Jika Anda perlu membuat gambar sistem file , lihat di bawah.

Jika Anda bermaksud menyalin sistem file root, sama sekali tidak digunakan dd. Anda harus menggunakan sesuatu seperti rsync -ax(atau cp -axpada direktori tingkat teratas individu), karena ada banyak hal yang TIDAK boleh ada dalam salinan . Di Linux, ini termasuk:

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

Beberapa di antaranya sebenarnya adalah antarmuka kernel dan bukan direktori nyata pada disk. Jika Anda menyalinnya, Anda menyalin banyak informasi yang tidak akan berlaku dalam salinan; jika Anda mencoba dan menjalankan sistem dengan itu hanya akan menyia-nyiakan ruang karena antarmuka nyata akan dipasang di atas. Lainnya berisi informasi sementara yang digunakan dengan menjalankan proses dan itu lebih merupakan masalah, karena sistem tidak akan dapat memilah sampah jika Anda menyalinnya.

Jika Anda ingin membuat file gambar dari sistem file root (atau sistem file apa pun), buat file gambar kosong - ini adalah penggunaan yang tepat untuk dd:

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

Itu adalah gambar 1024 MB (1000000 * 1024). Sesuaikan countjika Anda menginginkannya ukuran lain. Buat, misalnya, extsistem file dalam file :

mke2fs whatever.img

Ini akan memperingatkan Anda bahwa ini bukan perangkat blok nyata. Memproses. Sekarang pasang file gambar:

mount whatever.img /mnt/img

/mnt/imgpasti ada tetapi bisa apa saja. Anda sekarang dapat rsync(atau cp -a) masuk /mnt/img. Konten akan tetap di dalam whatever.imgketika Anda melepasnya.

Namun...

Supaya jelas, hanya gunakan metode gambar filesystem yang baru saja dijelaskan jika Anda benar-benar membutuhkan file gambar untuk alasan apa pun. Jika tujuan Anda adalah menyalin partisi ke hard drive lain, Anda tidak perlu gambar : buat partisi baru dengan sistem file kosong pada drive itu, pasang, dan salin ke sana. Anda bisa meletakkan konten sistem file ke dalam direktori kosong dan mengarsipnya:

tar -czf myarchive.tar.gz [the directory path]

Anda kemudian dapat menggunakan ini di partisi yang ada (kosong atau sebaliknya) dengan menempatkannya di tingkat atas dan menggunakan:

tar -xzf myarchive.tar.gz

Waspadalah yang akan menimpa file yang ada jika jalurnya cocok dengan sesuatu dalam arsip. Jika tidak, hierarki direktori yang ada akan tetap sama.

goldilocks
sumber
+1 menulis ke file gambar kosong sangat licin, tapi apa keuntungannya jika menyimpan lebih banyak ke arsip .tar atau .tgz?
Creek
@Creek Tidak memiliki kelebihan apa pun kecuali gambar dapat dipasang. Saya menambahkan bahwa jika tujuan OP di sini adalah untuk menghasilkan gambar yang dapat digunakan mentah. Kalau tidak, lebih baik menggunakan arsip karena arsip tidak berukuran tetap. Saya akan menambahkan peringatan yang lebih jelas tentang itu.
goldilocks
Gotcha, kurasa tidak. Masih merupakan metode yang keren untuk menyimpan file.
Creek
2
@ mpy Baik GNU coreutils cpdan rsync memiliki opsi -xuntuk menghindari rekursi ke sistem file lain. Jawaban Maciej paling menjelaskan mengapa hal ddini sangat tidak pantas di sini (hampir dijamin untuk menghasilkan salinan yang tidak dapat digunakan kecuali Anda mengambil tindakan pencegahan yang tercantum oleh Mark , karena penulisan yang akan terjadi selama salinan).
Gilles 'SO- stop being evil'
2
ddtidak akan menyalin hal-hal yang bukan direktori nyata pada disk, jadi saya tidak yakin dari mana titik pertama Anda berasal. Misalnya perangkat yang terpasang /mnt, simpul dalam /proc, dll. Tidak akan menjadi bagian dari data yang diambil ddkarena tidak ada di disk. Untuk unmount sistem file ddbenar-benar valid; Anda berakhir dengan duplikat yang tepat. Satu-satunya alasan tidak tepat untuk sistem file yang dipasang adalah bahwa data pada sistem dapat berubah / ditulis sebagian selama jangka waktu yang lama dduntuk beroperasi.
Jason C
1

rsync adalah alat pilihan untuk membuat cadangan sistem file, dan itu dapat membuat cadangan yang dapat di-boot dari OS yang sedang berjalan.

Beberapa peringatan:

  • Anda harus menambahkan opsi sup alfabet yang sesuai
  • jalan agak kritis
  • daftar pengecualian diperlukan, dan akan berbeda untuk setiap OS dan mungkin setiap konfigurasi

Beberapa kelebihan rsync dibandingkan metode lain seperti tar:

  • Anda dapat berhenti dan memulai pencadangan kapan saja
  • banyak pilihan untuk menangani file yang digantikan seperti delete on demand, delete before, move .....
  • melanjutkan (atau mengulangi) cadangan jauh lebih cepat daripada metode lain, karena file yang disalin sebelumnya dilewati. (Peningkatan kecepatan 20x biasa terjadi)
  • opsi --link-dest dapat membuat cadangan berversi sementara hanya benar-benar menyalin file baru

Cadangan gambar ada di tempatnya, tetapi menyalin persis apa adanya, termasuk masalah yang mungkin Anda miliki. Cadangan file membuat direktori baru dan memiliki efek samping melinearisasi (defragmenting) drive Anda dalam proses. Jika Anda ingin membuat 10 salinan identik dari OS Anda saat ini, saya akan menggunakan rsync untuk master salinan dan kemudian dd (atau serupa) untuk sisanya.

paul
sumber
1

Tergantung pada apa yang Anda maksud dengan "sistem kerja saat ini". Jika Anda hanya ingin menghindari menggunakan disk boot, dan tidak peduli dengan gangguan pada layanan yang berjalan di komputer, itu mungkin:

  1. Matikan semua program yang tidak penting (pada dasarnya, semuanya kecuali shell root yang Anda gunakan - jangan coba ini dari terminal X, gunakan shell konsol nyata). Mode single-user dapat membantu untuk ini.
  2. Jika Anda memiliki disk yang dipasang selain dari root sistem, lepaskan pemasangannya. Jangan lepaskan sistem file virtual seperti / proc, / sys, atau / dev.
  3. Siram data cache pada disk yang tersisa: sync
  4. Remount filesystem root read-only: mount -o ro /.
  5. Pasang hard drive eksternal Anda (Anda mungkin akan mendapat peringatan tentang tidak bisa menulis /etc/mtab; abaikan saja).
  6. Buat cadangan Anda.
  7. Lepaskan hard drive eksternal Anda.
  8. Mulai ulang. Anda membuat sistem Anda berantakan, dan mem-boot ulang adalah cara tercepat untuk mengembalikannya ke keadaan normal.

Saya menggunakan metode ini untuk membuat arsip komputer yang baru saja saya tingkatkan dari dan tidak berharap untuk menggunakan lebih banyak. Ini bukan metode yang sangat bagus untuk sistem yang digunakan aktif: lambat (butuh berjam-jam atau berhari-hari), cadangannya sangat besar (sehingga Anda tidak dapat menyimpan lebih dari beberapa), dan sangat mengganggu penggunaan sistem yang didukung naik. Untuk cadangan sehari-hari, saya merekomendasikan sesuatu yang berfungsi di tingkat sistem file, seperti rsnapshot.

Menandai
sumber
Perhatikan bahwa langkah 4 dapat berbahaya pada beberapa sistem file karena mereka menulis bahkan dalam mode read-only. Juga pada sistem yang lebih modern (Linux 3.something I belive) Anda hanya dapat menghubungkan /etc/mtabke /proc/self/mount- yang akan bekerja bahkan ketika Anda memiliki hal-hal seperti chroot atau fs ruang nama.
Maciej Piechotka
1
@MaciejPiechotka Saya tidak mengetahui adanya sistem file yang menulis saat dipasang dalam mode read-only dan saya akan merasa sangat aneh. Beberapa sistem file memang menulis pada saat mount dalam mode read-only jika sistem file sebelumnya tidak di-unmount, sehingga langkah tersebut mount -o remount,ro /dapat ditulis. Tetapi begitu perintah ini kembali, dalam situasi apa penulisan selanjutnya akan terjadi?
Gilles 'SO- berhenti bersikap jahat'
“Program yang tidak penting” yang harus ditutup harus secara kritis menyertakan subsistem logging, yang saya anggap tidak penting.
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles, untuk keperluan membuat disk image dari boot disk, program apa pun yang tidak terlibat langsung dalam pembuatan image tidak penting.
Markus
Mungkin perlu disebutkan mode pengguna tunggal dapat membantu di sini.
Vality
1

Gunakan Clonezilla , serius. Ini adalah sumber terbuka terbaik, utilitas Norton Ghost berbasis Linux. Ini akan melakukan partisi dan kloning disk penuh, baik disk ke disk atau sistem disk ke file (simpan sebagai file). Ini mendukung sebagian besar sistem file Linux, NTFS, FAT32 dan banyak lagi. Itu dapat menyimpan ke disk internal, drive eksternal atau bahkan melalui jaringan pada saham SMB atau NFS.

Ini sangat mudah digunakan dan akan menghemat banyak waktu.

Sunting: untuk menjawab pertanyaan, tidak, Anda tidak dapat ddsebagian besar sistem file saat mereka di-mount karena Anda berisiko berakhir dengan salinan yang tidak konsisten dari sistem file Anda karena membaca dari perangkat blok bukan atom. Misalnya, jika Anda menyalin 100 blok, sistem mungkin telah memperbarui blok pertama dan blok terakhir saat Anda hanya setengah jalan, yang berarti salinan Anda akan menyertakan blok terakhir yang dimodifikasi tetapi bukan yang pertama.

sleblanc
sumber
+1: tidak menjawab pertanyaan tetapi tampaknya merupakan saran yang bagus untuk cadangan hdd.
Marco Sulla