Câu trả lời:
Bạn có thể sử dụng parted -l
để xác định loại bảng phân vùng. Ví dụ:
$ sudo parted -l
Model: ATA TOSHIBA THNSNS25 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 4194kB 32.2GB 32.2GB primary ext4 boot
2 32.2GB 256GB 224GB primary ext4
Model: ATA Hitachi HDT72101 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 32.2GB 32.2GB primary ext4 boot
2 32.2GB 996GB 964GB primary ext4
3 996GB 1000GB 4295MB primary linux-swap(v1)
Trường Partition Table
này cho thấy tôi đang sử dụng msdos
bảng phân vùng MBR (bảng vẫn được sử dụng phổ biến cho Linux và Windows) trên cả hai đĩa. Từ man
trang parted
có thể tạo (và do đó hy vọng xác định) các loại bảng phân vùng sau (hoặc rộng hơn là 'nhãn đĩa'):
bsd
dvh
gpt - this is a GPT partition table
loop - this is raw disk access without a partition table
mac
msdos - this is a standard MBR partition table
pc98
sun
Đáng để thêm lệnh để liệt kê một phân vùng duy nhất vì điều này không rõ ràng nếu không có một số kiến thức parted
và nó có thể gây khó khăn cho việc tìm kiếm dữ liệu bạn cần nếu có nhiều ổ đĩa. Đối với /dev/sda
bạn sẽ làm:
parted /dev/sda print
parted /dev/sda p
cũng sẽ làm
Trên linux, bạn có thể kiểm tra điều này thông qua gdisk
công cụ sẽ có sẵn cho bất kỳ bản phân phối nào.
gdisk -l /dev/sda
Dưới đây, /dev/sda
là nút thiết bị của ổ đĩa vật lý , không phải là một phân vùng ( /dev/sda1
, /dev/sda2
, vv là phân vùng).
Nếu bạn thấy một cái gì đó bao gồm:
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
Bạn có một đĩa kiểu MBR. Đừng lo lắng, điều này đã không làm hại gì.
Nếu bạn không thấy cảnh báo này, bạn có đĩa GPT hoặc đĩa GPT / MBR lai . Loại thứ hai được sử dụng chủ yếu trên các máy Apple dành cho phiên bản khởi động kép của MS Windows không hỗ trợ GPT. gdisk
sẽ chỉ ra điều này với:
Found valid GPT with hybrid MBR; using GPT
Chúng cũng có thể được sử dụng trong các tình huống khác khi cần hỗ trợ cho cả hai phong cách.
cfdisk
trên phân vùng GPT cũng sẽ dẫn đến cảnh báo.
gdisk
gói, nó có thể được tìm thấy trong gptfdisk
gói ... ít nhất là trên Gentoo.
fdisk
hoặc cfdisk
có thể hỗ trợ GPT và do đó không hiển thị lỗi.
gdisk
phát hiện một bảng phân vùng lai GPT + MBR và đưa ra Found valid GPT with hybrid MBR; using GPT.
. Đây dường như là phương pháp duy nhất sẽ phát hiện bảng lai.
Vì hệ điều hành không được chỉ định, đây là cách làm FreeBSD .
Tất cả được thực hiện thông qua gpart
lệnh (viết tắt của GEOM partioner - không liên quan gì đến GNU).
Một đơn giản gpart show
sẽ hiển thị cho bạn tất cả các phân vùng có sẵn của tất cả các đĩa, nhưng bạn có thể chỉ định thiết bị để có cái nhìn chính xác hơn về một:
Bố cục phân vùng kế thừa với MBR (còn gọi là "msdos") và các lược đồ phân vùng BSD ( phân vùng 2 cấp thường được yêu cầu cho các hệ thống BSD, trừ khi sử dụng toàn bộ đĩa):
$
gpart show
=> 63 67108801 ada0 MBR (32G)
63 67108545 1 freebsd [active] (32G)
67108608 256 - free - (128k)
=> 0 67108545 ada0s1 BSD (32G)
0 2097152 2 freebsd-swap (1.0G)
2097152 65011393 1 freebsd-ufs (31G)
bố cục phân vùng hiện đại bằng GPT :
$
gpart show /dev/ada2
=> 34 976773101 ada2 GPT (465G)
34 6 - free - (3.0k)
40 128 1 freebsd-boot (64k)
168 67108864 2 freebsd-swap (32G)
67109032 901775360 3 freebsd-zfs (430G)
Để biết thêm, tất cả là trong gpart
hướng dẫn .
Với udisks
Linux:
$ sudo /lib/udev/udisks-part-id /dev/sda
using device_file=/dev/sda syspath=/sys/devices/pci0000:00/0000:00:0b.0/ata1/host0/target0:0:0/0:0:0:0/block/sda, offset=0 ao=0 and number=0 for /dev/sda
Entering MS-DOS parser (offset=0, size=500107862016)
MSDOS_MAGIC found
found partition type 0xee => protective MBR for GPT
Exiting MS-DOS parser
Entering EFI GPT parser
GPT magic found
partition_entry_lba=2
num_entries=128
size_of_entry=128
Leaving EFI GPT parser
EFI GPT partition table detected
UDISKS_PARTITION_TABLE=1
UDISKS_PARTITION_TABLE_SCHEME=gpt
UDISKS_PARTITION_TABLE_COUNT=4
Ở trên, tôi đã có một ổ đĩa với phân vùng lai GPT + MS-DOS. Trong trường hợp đó, nhân Linux bỏ qua phân vùng MS-DOS, đó là lý do tại sao udisks
đặt UDISKS_PARTITION_TABLE_SCHEME thành gpt.
Công cụ udisks-part-id đó được sử dụng để điền vào cơ sở dữ liệu udev. Vì vậy, nếu bạn đã udisks
cài đặt, bạn sẽ có thể truy vấn thông tin đó ngay cả với tư cách là người dùng không được bảo mật với:
$ udevadm info -q property -n sda | grep UDISKS_PARTITION_TABLE_SCHEME
UDISKS_PARTITION_TABLE_SCHEME=gpt
0xee
. Trong một kết hợp, đây là một MBR bình thường với một 0xee
phân vùng (và tiềm ẩn các vấn đề lớn nếu dữ liệu MBR không đồng bộ với dữ liệu GPT).
Sử dụng
$ sudo fdisk -l
Disk /dev/sda: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x987c1a05
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 999423 997376 487M 83 Linux
/dev/sda2 1001470 250068991 249067522 118.8G 5 Extended
/dev/sda5 1001472 250068991 249067520 118.8G 8e Linux LVM
Xem loại Đĩa: dos . Nếu nó hiển thị dos có nghĩa là lược đồ MBR thì lược đồ GPT khác
Trong các tập lệnh phân vùng Alpine Linux của tôi, tôi sử dụng:
check_scheme() {
fdisk -l $1 |grep "Disklabel type:" |awk '{ print $3 }'
}
fdisk -l /dev/sda | grep -i disklabel
không trả về gì, ( GNU Fdisk 1.3.0a ).
Bạn có thể sử dụng blkid
.
Ví dụ với đầu ra:
# blkid /dev/sdc
/dev/sdc: PTUUID="92f03b9b-7402-4ad2-8316-08a991c237b3" PTTYPE="gpt"
# blkid -o export /dev/sdc
DEVNAME=/dev/sdc
PTUUID=92f03b9b-7402-4ad2-8316-08a991c237b3
PTTYPE=gpt
Hoặc trong một tập lệnh, với -o value
tùy chọn:
disk=$1
part_type=$(blkid -o value -s PTTYPE $disk)
case $part_type in
gpt) echo "GPT";;
dos) echo "MBR";;
*) echo "partition is $part_type";;
esac