Mevcut çalışan sürücünün sürücü görüntüsünü almak güvenli mi?


12

Sabit diskimi yedeklemem gerekiyor. ddGörüntüyü harici bir hdd üzerine koymak ve kullanmak istiyorum .

  • Bunu ddhdd'de bulunan işletim sisteminden yapabilir miyim yoksa başka bir cihazdan, örneğin bir LiveCD'den önyükleme yapmak zorunda mıyım?
  • Cihaz monte edilmiş ve çalışıyorsa, genel olarak bir cihazın görüntüsünü almak güvenli midir?
  • Cihaz takılıysa, ancak çalışırken başka bir G / Ç işlemi olmadığından eminim dd?

Eminim rsyncyedeklemeler, özellikle artımlı olanlar için kullanmak için en iyi araçtır.

Ama ilgileniyorum dd, çünkü diğer depolama cihazlarını da yedeklemek istiyorum ve bölümlenmemiş alanda depolanan verileri de kopyalıyor. Örneğin, e-kitap okuyucum uboot, çekirdek ve diğer verileri depolamak için bölümlenmemiş bir alan kullanıyor.


Hangi dosya sistemini kullandığınız, hangisiyle ilgilendiğiniz önemlidir? Bazılarının bu görev için belirli özellikleri vardır.
Vality

Yanıtlar:


11

Genel olarak güvenli değildir. FS, işlemlerin belirli bir sırada yazıldığını varsayar, böylece yeni dosya verileri yazabilir ve daha sonra diğer verilerden bir işaretçi yapabilir, kesin ayrıntılar dosya sistemine bağlıdır. Aşağıdakilerin gerçekleşip gerçekleşmediğini düşünün:

  1. dd çöp veya bazı veriler içeren X konumundan okur
  2. Dosya sistemi X konumuna yazar
  3. Dosya sistemi X konumuna + 1 işaretçisini X konumuna yazar
  4. dd X konumundan 1 konum X konumuna bağlantı okur

Yedekleme açısından bir çöp verisi elde edersiniz. Ancak, geçici çözüm bulmanın birkaç yolu vardır:

  • Dosya sistemini dosya sistemine özel komutla dondur ( xfs_freezebir tanesi olduğuna inanıyorum ve başka birini bilmiyorum - ama bu seçenek en azından teoride var)
  • Bir lvm anlık görüntüsü oluşturun ve ondan kopyalayın. Bilgisayar yeniden başlatıldıysa (HDD yeniden sıralama eksi) kopya bu şekilde kirli bir dosya sistemi olacaktır, ancak kopya atomik olacaktır. Önce XFS gibi bazı dosya sistemlerinin dondurulması gerektiğini unutmayın.
  • Başkaları tarafından önerilen şekilde rsync kullanın. Artık kopya güvenlidir ve LVM'ye ihtiyacınız yoktur ancak kopya atomik değildir. Bu nedenle, dosya sistemi düzeyinde yukarıdaki sorunu ortadan kaldırırken, yine de dosyalar ile ilgili sorunlara neden olabilir (örneğin, mv örneğin arka planda yürütülürken eksik dosyalar hayal edilebilir).
  • Gibi snapshoting ile kullanın dosya sistemi Btrfs , tux3 , ZFS , nilfs ... Sonra her iki sorunlardan kaçınmak - Sadece bir anlık görüntü oluşturmak ve tam atomicity sahip rsync ile ondan kopyalayabilirsiniz. Ancak, bu tür bir dosya sisteminin genellikle deneysel olma eğiliminde olduğunu unutmayın.

Son bir not olarak - dden iyi yedekleme yolu olmayabilir. 'Çöp'ü de kopyalarken genellikle boşa giden tam bir diski kopyalar. Bir disk görüntüsüne ihtiyacınız varsa, partimage gibi bir şey daha iyi olabilir. Daha iyi bir seçenek yoksa, rsync, diferansiyel / artımlı modda katran vb. Veya bacula , tarsnap veya diğerlerinden biri gibi tam bir yedekleme sistemi kullanmaktır . Veri tekilleştirme, yedeklemelerin boyutları için harikalar yaratabilir.


1
+1 Bu, aslında op'un ne istediğini okumak için mükemmel bir şekilde yapılan ve dd'nin ne kadar kötü olduğu konusunda ranting yapmayan bu soruya cevap vermeye çalışan tek cevaptır.
Vality

İyi bir cevap için +1. Ama sıralamaya katılmıyorum. DD fena değil. Bunun için uygun değil ve neden böyle olduğunu açıklamak iyi bir şey.
Hennes

Madde işareti 4, # 2 ile aynı sınırlamalara sahiptir, değil mi? Bir uygulama yazma işlemlerinin ortasında olabilir ve anlık görüntü uygulama düzeyinde işlem hakkında hiçbir şey bilmez.
Ben Voigt

Teşekkür ederim, soruya cevap veriyor. goldilocks'ın cevabı da iyi, ama sadece hdd'imi değil, diğer depolama cihazlarını da yedeklemek istiyorum ve belki de daha önce yazmak zorunda kaldım.
Marco Sulla

@BenVoigt - bir dereceye kadar - bir katmanı (dosya sistemi) ortadan kaldırır ve AFAIK 'daha kırılgan' bir katmandır. Yine de bazı durumlarda yarı yazılı dosyalar bulabilirsiniz, ancak uygulama onlarla başa çıkmazsa, dosyalar diğer birçok durumda da bozulabilir (OOM, çökme, vb.) Bu yüzden doğru yazılmış uygulama onunla başa çıkmalıdır.
Maciej Piechotka

7

Bölümün tam olarak ne olduğuna ve kopyanın amacına bağlıdır. Ancak, genel ddolarak dosya sistemlerini yedeklemek için uygun olmayan bir araç olduğunu söyleyeceğim . Bunun amacı da bu değildi.

  • Bölümün boş bölümlerini kopyalamak çok zaman harcayacaktır.

  • Dosya sisteminin şu anda takılı olması, kısmen işletim sistemi düzeyinde bir varlık olması ve temeldeki blok cihazı ile senkronize olmaması nedeniyle tutarsızlıklara neden olabilir. syncBaşlangıçta aramak buna çok yardımcı olmaz, çünkü süreç anlık değildir.

Kullanın cp -aveya rsyncbunun yerine. Daha sonra hedef bölümü oluşturmanız gerekir, elbette, o kadar kolay ölü ölü değildir, ancak çok daha güvenli ve daha esnektir. Bir dosya sistemi görüntüsü oluşturmanız gerekiyorsa aşağıya bakın.

Kök dosya sistemini kopyalamak istiyorsanız, kesinlikle kullanmayın dd. Kopyada OLMAMASI gereken bir sürü şey olduğu için rsync -ax(veya cp -axtek tek üst düzey dizinlerde) bir şey kullanmalısınız . Linux'ta buna aşağıdakiler dahildir:

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

Bunlardan bazıları aslında çekirdek arayüzleridir, diskteki gerçek dizinler değildir. Bunları kopyalarsanız, kopyada geçerli olmayacak bir grup bilgiyi kopyalıyorsunuz demektir; onunla bir sistemi denerseniz, gerçek arayüz üste monte edileceği için boşa harcanan alan olacaktır. Diğerleri, çalıştırma işlemlerinde kullanılan geçici bilgileri içerir ve bunlar daha sorunludur, çünkü sistem bunu kopyalarsanız çöpü sıralayamaz.

Kök dosya sisteminin (veya herhangi bir dosya sisteminin) bir görüntü dosyasını oluşturmak istiyorsanız , boş bir görüntü dosyası oluşturun - bu aşağıdakiler için uygun bir kullanımdır dd:

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

Bu 1024 MB boyutunda bir görüntüdür (1000000 * 1024). countBaşka bir boyut istiyorsanız ayarlayın . Örneğin, dosyada bir extdosya sistemi oluşturun :

mke2fs whatever.img

Bunun gerçek bir blok cihaz olmadığı konusunda sizi uyaracaktır. İlerlemek. Şimdi görüntü dosyasını bağlayın:

mount whatever.img /mnt/img

/mnt/imgvar olmalı ama her şey olabilir. Şimdi rsync(veya cp -a) içine girebilirsiniz /mnt/img. Çıkardığınızda içerik içeride kalacaktır whatever.img.

Ancak...

Açık olmak gerekirse, sadece herhangi bir nedenle bir görüntü dosyasına ihtiyacınız varsa, sadece açıklanan dosya sistemi görüntü yöntemini kullanın. Amacınız bölümü başka bir sabit sürücüye kopyalamaksa, bir görüntüye ihtiyacınız yoktur : o sürücüde boş bir dosya sistemiyle yeni bir bölüm oluşturun, bağlayın ve buraya kopyalayın. Bunun yerine dosya sistemi içeriğini boş bir dizine koyabilir ve arşivleyebilirsiniz:

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

Daha sonra bunu üst seviyeye yerleştirip aşağıdakileri kullanarak mevcut (boş veya başka bir şekilde) bir bölüme dağıtabilirsiniz:

tar -xzf myarchive.tar.gz

Yolları arşivdeki bir şeyle eşleşiyorsa mevcut dosyaların üzerine yazacağına dikkat edin. Aksi takdirde mevcut dizin hiyerarşisini aynı bırakacaktır.


Boş bir görüntü dosyasına +1 yazma çok kaygandır, ancak bunun bir .tar veya .tgz arşivine kaydetmenin ne gibi avantajları vardır?
Creek

@Creek Görüntünün monte edilebilir olması dışında herhangi bir avantajı yoktur. OP'nin buradaki amacının ham olarak kullanılabilecek bir görüntü üretmek olması durumunda ekledim. Aksi takdirde, arşivin boyutu sabit olmadığından arşiv kullanmak daha iyidir. Bununla ilgili daha net bir uyarı ekleyeceğim.
goldilocks

Yakaladım, ben öyle düşünmedim. Dosyaları saklamak için hala harika bir yöntem.
Creek

2
@mpy Hem GNU coreutils hem de cprsync, -xdiğer dosya sistemlerine özyinelemeyi önleme seçeneğine sahiptir. Maciej'in cevabı en iyi ddburada neden kesinlikle uygunsuz olduğunu açıklar ( aksi takdirde kopya sırasında gerçekleşecek yazılar nedeniyle Mark tarafından listelenen önlemleri almadığınız sürece kullanılamaz bir kopya üretilmesi neredeyse garanti edilir ).
Gilles 'SO- kötü olmayı bırak

2
dddiskteki gerçek dizin olmayan şeyleri kopyalamaz, bu yüzden ilk noktanızın nereden geldiğinden emin değilim. Örneğin /mnt, takılan cihazlar , düğümler /procvb dd., Diskte olmadığı için yakalanan verilerin bir parçası olmaz. Takılmamış dosya sistemleri ddiçin tamamen geçerlidir; kesin bir kopya ile sonuçlanır. Takılı dosya sistemleri için uygunsuz olmasının tek nedeni, sistemdeki verilerin çalışması için uzun bir süre boyunca değişebilmesi / kısmen yazılabilmesidir dd.
Jason C

1

rsync bir dosya sistemini yedeklemek için tercih edilen bir araçtır ve mevcut çalışan işletim sisteminin önyüklenebilir bir yedeklemesini yapabilir.

Bazı uyarılar:

  • uygun alfabe çorbası seçeneklerini eklemelisiniz
  • yollar oldukça kritik
  • bir hariç tutma listesi gereklidir ve her işletim sistemi ve muhtemelen her yapılandırma için farklı olacaktır

Rsync'in katran gibi diğer yöntemlere göre bazı avantajları:

  • yedeklemeyi istediğiniz zaman durdurabilir ve başlatabilirsiniz
  • istek üzerine sil, önce sil, taşı gibi yerini alan dosyaları işlemek için birçok seçenek .....
  • devam ettirilen (veya tekrarlanan) yedeklemeler, daha önce kopyalanan dosyalar atlandığından diğer yöntemlerden çok daha hızlıdır. (20x hız artışı yaygındır)
  • --link-dest seçeneği yalnızca yeni dosyaları kopyalarken sürümlendirilmiş yedeklemeler oluşturabilir

Görüntü yedeklerinin yerleri vardır, ancak olası sorunlar da dahil olmak üzere sürücüyü olduğu gibi kopyalarlar. Bir dosya yedeklemesi yeni bir dizin oluşturur ve işleminizdeki sürücünüzü doğrusallaştırma (birleştirme) yan etkisine sahiptir. Mevcut işletim sisteminizin 10 özdeş kopyasını yapmak istiyorsanız, kopya yöneticisi için rsync ve geri kalanı için dd (veya benzeri) kullanırdım.


1

"Mevcut çalışma sistemi" ile ne demek istediğinize bağlıdır. Yalnızca bir önyükleme diski kullanmaktan kaçınmak ve bilgisayarda çalışan hizmetlerin kesintiye uğramasını istemiyorsanız, bu mümkündür:

  1. Tüm gereksiz programları kapatın (temel olarak, içinde çalıştığınız kök kabuk hariç her şey - bunu bir X terminalinden denemeyin, gerçek bir konsol kabuğu kullanın). Tek kullanıcı modu bu konuda yardımcı olabilir.
  2. Sistem kökünden başka bir disk taktıysanız, çıkarın. / Proc, / sys veya / dev gibi sanal dosya sistemlerini çıkarmayın.
  3. Kalan diskteki önbelleğe alınmış verileri temizleme: sync
  4. Remount Kök dosya sistemi salt okunur: mount -o ro /.
  5. Harici sabit sürücünüzü takın (muhtemelen yazamamanız konusunda bir uyarı alırsınız /etc/mtab; yok sayın).
  6. Yedekleme yapın.
  7. Harici sabit sürücünüzü çıkarın.
  8. Yeniden Başlatma. Sisteminizin buraya gelmesini oldukça karışık hale getirdiniz ve yeniden başlatma, onu normale döndürmenin en hızlı yoludur.

Bu yöntemi, yeni yükselttiğim ve daha fazlasını kullanmayı beklemediğim bir bilgisayarın arşivini yapmak için kullanıyorum. Aktif kullanımda olan bir sistem için çok iyi bir yöntem değildir: yavaştır (saatler veya günler alır), yedeklemeler çok büyüktür (bu nedenle birkaç taneden fazlasını tutamazsınız) ve desteklenmekte olan sistemin kullanımı inanılmaz derecede bozucudur. yukarı. Günlük yedeklemeler için, dosya sistemi düzeyinde çalışan bir şey öneriyorum rsnapshot.


4. adımın, salt okunur modda bile yazdıkları için bazı dosya sistemlerinde tehlikeli olabileceğini unutmayın. Ayrıca daha modern sistemlerde sadece bağlayabilirsiniz (Linux ı inanıyoruz 3.something) /etc/mtabiçin /proc/self/mountsize chroots veya fs ad gibi şeyler varken bile çalışacak olan -.
Maciej Piechotka

1
@MaciejPiechotka ben yazma herhangi dosya sisteminin farkında değilim iken monte salt okunur modda ve bunu çok garip bulur. Bazı dosya sistemleri yazma yapmak montaj üzerine dosya sistemi daha önce temiz unmounted, adım böylece olmasaydı salt okunur modda mount -o remount,ro /yazabilirsiniz. Ancak bu komut geri döndüğünde, hangi durumlarda sonraki yazma işlemleri gerçekleşir?
Gilles 'SO- kötü olmayı bırak

Kapatılması gereken “zorunlu olmayan programlar”, önemsiz olarak değerlendirmediğim günlük kaydı alt sistemini içermelidir.
Gilles 'SO- kötü olmayı bırak'

@Gilles, önyükleme diskinin bir disk görüntüsünü yapmak amacıyla, görüntünün oluşturulmasında doğrudan yer almayan herhangi bir program gerekli değildir.
Mark

Burada tek kullanıcı modundan bahsetmek faydalı olabilir.
Vality

1

Kullanım Clonezilla ciddi. En iyi açık kaynaklı, Linux tabanlı Norton Ghost benzeri bir yardımcı programdır. Diskten diske veya diskten dosya sistemine (dosya olarak kaydetme) hem bölüm hem de tam disk klonlama yapar. Çoğu Linux dosya sistemini, NTFS, FAT32 ve daha fazlasını destekler. Dahili bir diske, harici bir sürücüye veya hatta SMB veya NFS paylaşımlarında ağ üzerinden kaydedebilir.

Kullanımı çok kolaydır ve size çok zaman kazandıracaktır.

Düzenleme: soruyu cevaplamak için, hayır, ddbir blok cihazdan okuma atomik olmadığı için dosya sisteminizin tutarsız bir kopyasıyla sonuçlanma riskiniz olduğundan, çoğu dosya sistemini takılıyken yapamazsınız. Örneğin, 100 bloğu kopyalıyorsanız, sistem sadece yarıdayken ilk bloğu ve son bloğu güncellemiş olabilir, yani kopyanız değiştirilen son bloğu içerecek, ancak ilk bloğu içerecektir.


+1: soruyu cevaplamıyor ancak hdd yedekleme için iyi bir öneri gibi görünüyor.
Marco Sulla
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.