it-swarm-id.com

Cara menyalin tata letak partisi seluruh disk menggunakan alat standar

Saya ingin mengambil cadangan seluruh partisi tata letak dari hard drive, termasuk drive logis, sehingga saya dapat mengembalikan tata letak itu ke disk lain. Saya lakukan tidak ingin menyalin isi partisi, hanya tata letak. Untuk partisi primer dan perluasan, mudah:

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

Tetapi ketika datang ke tata letak partisi logis, saya ingin tahu apakah ada di antara alat standar cara yang sama untuk menyimpan tata letak? Saya kira masalah utama adalah menemukan offset ke lokasi EBR, karena dengan itu, dd akan melakukan sisanya. Perlu diingat saya harus bisa mengembalikan semuanya ke disk kosong (mungkin) dan dengan demikian mengembalikan tata letak yang sama. Menggunakan alat pemartisi seperti fdisk atau parted baik-baik saja, tetapi saya harus dapat mengotomatiskan penggunaannya (scripting) dan mereka tidak boleh bergantung pada paket-paket terkait-X - hanya baris perintah.

Rencana cadangan saya melakukannya secara manual dalam sedikit python script menggunakan modul struct, tapi saya agak berharap ada cara yang lebih mudah.

86

Anda dapat menggunakan sfdisk untuk tugas ini.

Menyimpan:

sfdisk -d /dev/sda > part_table

Mengembalikan:

sfdisk /dev/sda < part_table

Untuk tabel partisi GPT, ini membutuhkan sfdisk dari util-linux 2.26 atau yang lebih baru. Itu ditulis ulang dari awal di atas libfdisk .

Ini menyalin UUID tidak berubah, daripada menghasilkan yang baru. Jadi disk baru adalah tiruan dari yang asli, bukan hanya disk lain dengan tata letak yang sama. Perhatikan bahwa Linux /dev/disk/by-uuid/ melihat UUID sistem file, bukan UUID di tabel partisi. sfdisk akan menghasilkan UUID baru jika Anda mengedit UUID dari dump (per-partisi dan UUID untuk tabel partisi itu sendiri di dekat awal file).

92
Petr Uzel

Tergantung jika disk sumber Anda menggunakan MBR (alias "dos" atau "msdos") atau tabel partisi GPT (alias "GUID").

Disk lebih dari 2 TB tidak dapat menggunakan MBR, jadi mereka GPT.

Disk di bawah 2 TB dapat menggunakan keduanya, jadi Anda harus terlebih dahulu mencari tahu mana itu.

Dengan anggapan Anda menggunakan Linux, gunakan salah satu dari perintah ini untuk mencari tahu tabel partisi mana yang digunakan oleh disk sumber Anda:

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

Diberikan

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

Untuk disk MBR

gunakan sfdisk seperti yang disarankan oleh jawaban Petr Uzel, atau varian ini:

# 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

Untuk disk GPT

Jawaban yang benar diberikan di sini dan di sini oleh Kris Harper .

Anda perlu GPT fdisk . Lihat halaman unduh atau jalankan Sudo apt-get install gdisk.

Kemudian gunakan perintah sgdisk :

# Save GPT 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

Perintah terakhir mengacak GUID pada disk dan semua partisi. Ini hanya diperlukan jika disk digunakan di mesin yang sama, jika tidak maka tidak perlu.

54
mivk

Lebih lama tetapi masih menarik pyparted dan python-lvm binding.

Pembaruan:

Yang sebelumnya telah diposting karena di atas tidak berfungsi dalam banyak situasi modern per halaman manual sfdisk.

sfdisk tidak mengerti GUID Partition Table (GPT) dan tidak dirancang untuk partisi besar. Khususnya, gunakan lebih lanjut GNU berpisah (8).

Namun perintah ini mendukung> 2 TB partisi dan LVM.

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

Output sampel:

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