it-swarm-vi.com

Cách sao chép bố cục phân vùng của toàn bộ đĩa bằng các công cụ tiêu chuẩn

Tôi muốn sao lưu toàn bộ bố cục phân vùng của ổ cứng, bao gồm cả ổ đĩa logic, để tôi có thể khôi phục bố cục đó sang đĩa khác. Tôi làm không muốn sao chép nội dung của các phân vùng, chỉ bố cục. Đối với các phân vùng chính và mở rộng, thật dễ dàng:

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

Nhưng khi nói đến cách bố trí các phân vùng hợp lý, tôi tự hỏi liệu có tồn tại trong số các công cụ tiêu chuẩn một cách tương tự để lưu bố cục không? Tôi đoán vấn đề chính là tìm sự bù đắp cho các vị trí của EBR, bởi vì với điều đó, dd sẽ làm phần còn lại. Hãy nhớ rằng tôi cần có thể đặt mọi thứ trở lại vào một đĩa trống (có thể) và từ đó khôi phục lại bố cục tương tự. Sử dụng các công cụ phân vùng như fdisk hoặc parted là tốt, nhưng tôi phải có khả năng tự động hóa việc sử dụng chúng (kịch bản) và chúng không nên phụ thuộc vào bất kỳ gói nào liên quan đến X - chỉ dòng lệnh.

Kế hoạch sao lưu của tôi đang thực hiện thủ công trong một tập lệnh python bằng mô-đun struct, nhưng tôi hy vọng có một cách dễ dàng hơn.

86
Lauritz V. Thaulow

Bạn có thể sử dụng sfdisk cho nhiệm vụ này.

Tiết kiệm:

sfdisk -d /dev/sda > part_table

Khôi phục:

sfdisk /dev/sda < part_table

Đối với các bảng phân vùng GPT, điều này đòi hỏi sfdisk từ produc-linux 2.26 trở lên. Nó được viết lại từ đầu trên libfdisk .

Điều này sao chép các UUID không thay đổi, thay vì tạo ra các UUID mới. Vì vậy, đĩa mới là bản sao của bản gốc, không chỉ là một đĩa khác có cùng bố cục. Lưu ý rằng Linux của /dev/disk/by-uuid/ nhìn vào UUID hệ thống tập tin, tuy nhiên, không phải UUID trong bảng phân vùng. sfdisk sẽ tạo UUID mới nếu bạn chỉnh sửa UUID từ kết xuất (mỗi phân vùng và UUID cho chính bảng phân vùng gần đầu tệp).

92
Petr Uzel

Tùy thuộc nếu đĩa nguồn của bạn sử dụng MBR (còn gọi là "dos" hoặc "msdos") hoặc bảng phân vùng GPT (còn gọi là "GUID").

Đĩa trên 2 TB không thể sử dụng MBR, vì vậy chúng là GPT.

Đĩa dưới 2 TB có thể sử dụng cả hai, vì vậy trước tiên bạn sẽ phải tìm ra nó là gì.

Giả sử bạn đang dùng Linux, hãy sử dụng một trong hai lệnh này để tìm ra bảng phân vùng mà đĩa nguồn của bạn sử dụng:

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

Được

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

Đối với đĩa MBR

sử dụng sfdisk theo đề xuất của câu trả lời của Petr Uzel hoặc biến thể này:

# 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

Đối với đĩa GPT

Câu trả lời đúng đã được đưa ra tại đâytại đây bởi Kris Harper .

Bạn cần GPT fdisk . Nhìn vào trang tải xuống hoặc chạy Sudo apt-get install gdisk.

Sau đó sử dụng lệnh 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

Lệnh cuối cùng ngẫu nhiên hóa GUID trên đĩa và tất cả các phân vùng. Điều này chỉ cần thiết nếu các đĩa được sử dụng trong cùng một máy, nếu không thì không cần thiết.

54
mivk

Cũ hơn nhưng vẫn thú vị pypartedpython-lvm ràng buộc.

Cập nhật:

Cái trước đã được đăng bởi vì cái trên không hoạt động trong nhiều tình huống hiện đại trên trang man sfdisk.

sfdisk không hiểu GUID Bảng phân vùng (GPT) và nó không được thiết kế cho các phân vùng lớn. Trong trường hợp cụ thể, hãy sử dụng nâng cao hơn GNU chia tay (8).

Tuy nhiên lệnh này hỗ trợ> 2 TB phân vùng và LVM.

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

Đầu ra mẫu:

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