Standart araçları kullanarak tüm diskin bölüm düzenini kopyalama


81

Bütün bölüm yedeğini almak istiyorum düzeni başka diske bu düzeni geri böylece, mantıksal sürücüler de dahil olmak üzere bir sabit sürücüye ait. Ben do not bölüm içeriği yalnızca düzenini kopyalamak istediğiniz. Birincil ve genişletilmiş bölümler için kolaydır:

dd if=/dev/sda of=partitiontable.bin bs=1 skip=446 count=64 # backup
dd if=partitiontable.bin of=/dev/sda bs=1 seek=446 count=64 # restore

Ancak mantıksal bölümlerin düzenine gelince, standart araçlar arasında düzeni düzenlemenin benzer bir yolu olup olmadığını merak ediyorum. Sanırım asıl sorun EBR'lerin lokasyonlarındaki ofsetleri bulmak, çünkü bununla birlikte gerisini halledecek dd. Unutmayın, her şeyi (muhtemelen) boş bir diske geri koyabilir ve böylece aynı düzeni geri yükleyebilirim. Gibi fdiskveya partediyi bölümleme araçlarını kullanarak , ancak onların kullanımını otomatikleştirmek mümkün olmalıdır (komut dosyası) ve onlar sadece herhangi bir X ile ilgili paketlere bağlı olmamalıdır - sadece komut satırına.

Yedekleme planım, struct modülünü kullanarak küçük bir python komut dosyasında el ile yapıyor, ancak bunun daha kolay bir yolu olmasını umuyordum.

Yanıtlar:


89

Bu görev için sfdisk kullanabilirsiniz .

Kayıt etmek:

sfdisk -d /dev/sda > part_table

Onarmak:

sfdisk /dev/sda < part_table

GPT bölümleme tabloları için sfdisk, util-linux 2.26 veya üstü gerekir. Bu libfdisk üstünde sıfırdan yeniden yazılmıştır .

Bu, UUID'leri yenilerini oluşturmak yerine değiştirmeden kopyalar. Bu nedenle, yeni disk yalnızca aynı düzende başka bir disk değil, orijinalin bir kopyasıdır. Linux'un /dev/disk/by-uuid/, bölüm tablosundaki UUID'lere değil, dosya sistemi UUID'lerine baktığını unutmayın . sfdiskUUID'leri dökümden (bölüm başına ve bölüm tablosunun kendisi için dosyanın başlangıcına yakın olan UUID) düzenlerseniz yeni UUID'ler üretecektir.


1
Kesin olarak bilmiyorum, ama aklıma gelen tek sınır, msdos bölümleme tablosu düzeni tarafından dayatılan bölüm için 2 TB boyut sınırı. Bu sınırın üstesinden gelmek için, kişi bunun yerine GPT'yi kullanabilir, ancak AFAIK sfdisk GPT ile çalışamaz. Başka bir sınır olup olmadığını veya sfdisk'in baş edemediğini bildirip bildirmeyeceğini bilmiyorum.
Petr Uzel

2
sfdiskbüyük hacimlerle çalışmaz veya GPT'yi desteklemez.
dhchdhd

1
@Barry ve "büyük" derken, 2PB limitinden bahsediyorsun @Petr hakkında konuşuyor?
Lauritz V. Thaulow

5
Doğru yol şudur: sudo parted / dev / sda -lm> sda.parted
dhchdhd

1
Bazen, DOS sadece sorunları yoksaymak, -L veya --linux seçeneğini eklemek yararlı olur :sfdisk -L /dev/sda < part_table
Diego

50

Kaynak diskinizin MBR (aka "dos" veya "msdos") veya GPT (aka "GUID") bölüm tablosu kullanıp kullanmadığına bağlıdır .

2 TB'ın üzerindeki diskler MBR kullanamaz, bu yüzden GPT'dir.

2 TB altındaki diskler her ikisini de kullanabilir, bu yüzden ilk önce ne olduğunu öğrenmeniz gerekir.

Linux'ta olduğunuzu varsayarak, kaynak diskinizin hangi bölüm tablosunu kullandığını bulmak için bu komutlardan birini kullanın:

disk=/dev/sda

# Always available, but old versions may not recognize gpt
fdisk -l $disk | grep type

# `apt-get install gdisk` or equivalent on non-Debian systems
gdisk -l $disk | grep -A4 'scan'

# `apt-get install parted`
parted $disk print | grep Table

verilmiş

source=/dev/sda
dest=/dev/sdb

MBR diskleri için

sfdiskPetr Uzel'in cevabında veya bu varyantta önerildiği şekilde kullanın :

# Save MBR disks
sfdisk -d $source > /partitions-backup-$(basename $source).sfdisk
sfdisk -d $dest   > /partitions-backup-$(basename $dest).sfdisk

# Copy $source layout to $dest
sfdisk -d $source | sfdisk $dest

GPT diskleri için

Doğru cevap burada ve burada Kris Harper tarafından verildi .

GPT fdisk'ine ihtiyacınız var . Bak indirme sayfasına veya kaçak sudo apt-get install gdisk.

Ardından sgdisk komutunu kullanın:

# Save MBR disks
sgdisk --backup=/partitions-backup-$(basename $source).sgdisk $source
sgdisk --backup=/partitions-backup-$(basename $dest).sgdisk $dest

# Copy $source layout to $dest and regenerate GUIDs
sgdisk --replicate=$dest $source
sgdisk -G $dest

Son komut, diskteki GUID'yi ve tüm bölümleri rasgele belirler. Bu sadece diskler aynı makinede kullanılacaksa gereklidir, aksi takdirde gereksizdir.


10
Her zaman korkuyorum, iki parametreyi karıştıracağım, bu nedenle --backup=Filebölüm tablosunu kaynak sürücüden dışa aktarmak --load-backup=Fileve hedef sürücüye geri yüklemek için iyi bir püf noktası kullanmaktır.
zidarsk8

Bölümleme tablosunu taşıdığınızda ve ardından disklerin ve bölümlerin GUID'lerini yukarıda tanımladığınız gibi rasgele konumlandırdığınızda, disklerde ve sonraki bölümlerde var olan veriler için herhangi bir risk var mı? Teşekkürler!
EngBIRD

@EngBIRD: $ source ile $ dest arasında bir karışım yapmadığınız sürece, hedefe ilişkin veri olmadığı için veri riski yoktur. Yalnızca bölüm düzenini kopyalarsınız ve verileri daha sonra biçimlendirmeniz ve kopyalamanız gerekir.
Ağustos'ta


5

Daha eski ama yine de ilgi çekici ve python-lvm ciltleri.

Güncelleme:

Birincisi, sfdisk adam sayfası başına yukarıdaki birçok modern durumda çalışmadığı için yayınlanmıştır.

sfdisk GUID Bölümleme Tablosunu (GPT) anlamamaktadır ve büyük bölümler için tasarlanmamıştır. Özel durumlarda, daha gelişmiş GNU bölümlerini kullanın (8).

Ancak bu komut> 2 TB bölümü ve LVM'yi destekler.

# parted -ms /dev/sda print > sda.parted

Örnek çıktı:

BYT;
/dev/sda:12.9GB:scsi:512:512:msdos:VMware Virtual disk;
1:1049kB:12.9GB:12.9GB:::boot, lvm;

14
Kaydedilen sda.parteddosyadan yeni bir diske nasıl geri yüklersiniz ?
Avery Chan,

4
Bu cevap işe yaramaz çünkü soru bölüm düzenini yeni bir sürücüye kopyalamaktı. Cevap sadece çöplükle ilgili. Nasıl ithal edilir? Lütfen geliştirin.
saat

Görünüşe göre şu anda, iyi bir cevap yok: serverfault.com/questions/709582/…
Otheus
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.