Linux / GParted có thể thấy bảng phân vùng nhưng dd bs = 512 Count = 1 không thể


8

Tôi có thẻ sd được định dạng MBR và khi kết nối với máy Linux (xubfox 12.04), nó có thể gắn phân vùng và phân tích hệ thống tệp (như có thể GParted). Tuy nhiên, khi tôi cố đọc MBR từ thiết bị bằng dd, nó cung cấp cho tôi một loạt dữ liệu giả.

Bất cứ ai cũng có thể làm sáng tỏ về cách Linux / GParted có thể đọc và hiểu ý nghĩa của MBR khi dd không thể đọc MBR. Họ có sử dụng các phương pháp khác nhau để lấy dữ liệu không? IE không mở (), đọc ()

Lệnh DD là:

dd if=/dev/sdb of=mbr.bin bs=512 count=1

Đầu ra DD là:

1+0 records in
1+0 records out
512 bytes transferred in 0.000786 secs (651345 bytes/sec)

mbr.bin đổ với hexdump -C mbr.binlà:

00000000  04 16 41 53 4d 49 2d 53  44 03 00 00 00 00 16 f1  |..ASMI-SD.......|
00000010  00 7f 00 32 1f 5b 80 00  36 db bf bf 96 c0 00 01  |...2.[..6.......|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  6f 00 00 10 00 00 02 2e  00 00 00 00 00 00 00 00  |o...............|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200

Sản lượng nào ddcho?
qdii

Bạn có ý nghĩa gì bởi dd không thể đọc dữ liệu ?
qdii

512 byte đầu tiên phải là MBR chứa bảng phân vùng nhưng rõ ràng không phải vậy
Tom Booth

hmm có lẽ bởi vì bạn không sử dụng nó? Điều kỳ diệu với GPT là Bảng phân vùng thay thế MBR (nhưng MBR có thể được bảo tồn để các bộ tải khởi động mong muốn một bộ tiếp tục hoạt động).
qdii

1
Đầu ra của là gì fdisk -lu /dev/sdb, gdisk -l /dev/sdbgrep sdb /proc/partitions?
Stéphane Chazelas

Câu trả lời:


2

Thẻ không có Bản ghi khởi động chính (MBR). Nếu nó có hexdump của bạn sẽ cung cấp cho bạn ít nhất một mục nhập phân vùng ở phần bù 0x1C055aaở cuối.

Không phải tất cả các bảng phân vùng bố trí dữ liệu trong 512 byte đầu tiên. Các dữ liệu giả mạo bạn thấy là SID và CSD đăng ký của (a / các) thẻ SD. Nhưng từ vẻ bề ngoài của nó, nó không phải là dữ liệu chính xác cho thẻ (trừ khi đó là mẫu 1 MiB 2001 cũ.)

16 byte đầu tiên là:

CID Register:
----------------------------------------------------------------------------
Manufacturer ID       (MID): 04               => (Transcend)
OEM/Application ID    (OID): 16 41            =  ?A
Product name          (PNM): 53 4d 49 2d 53   =  SMI-S
Product revision      (PRV): 44               =  0100 0100 => 4.4
Product serial number (PSN): 03 00 00 00
reserved               (-) : 00 >> 4          = 0000b
Manufacturing date    (MDT): (00 & 0x0f)|0x16 = 0001b,0110b => 2000+1,6=> Jun 2001
CRC7 checksum         (CRC): 1f >> 1          = 120
always 1               (1) : 1f & 1           = 1

16 byte tiếp theo (ít nhất là một phần của nó):

CSD Register:
----------------------------------------------------------------------------
CSD Structure        (CSD_STRUCTURE): 00 >> 6  = 00b => CSD Version 1.0
reserved                         (-): 00 & 3f  = 00 0000b
Data read access time 1       (TAAC): 7f = 1111b => time val 8.0, 111b => 7=10ms
Data read access time 2       (NSAC): 00
Max. data transfer rate (TRAN_SPEED): 32 = 0110,010 time val 2.5, 2=10Mbit/s 25MHz
Card command classes           (CCC): 1f << 4 | 5b >> 4 = 0x1f5

...
Device size (C_SIZE) : (0x80 & 0x03) << 0xa | 00h | 36 >> 6 : 0

Max. read  current @VDD min (VDD_R_CURR_MIN) : 110 => 60mA
Max. read  current @VDD max (VDD_R_CURR_MAX) : 110 => 80mA
Max. write current @VDD min (VDD_W_CURR_MIN) : 110 => 60mA
Max. write current @VDD max (VDD_W_CURR_MAX) : 110 => 80mA
Device size multiplier         (C_SIZE_MULT) : 111 => 2^(7 + 2) = 512
Erase single block enable     (ERASE_BLK_EN) : 0
Erase sector size              (SECTOR_SIZE) : 1111111 => 127 + 1 = 128
Write protect group size       (WP_GRP_SIZE) : 0111111 =>  63 + 1 = 64

MULT      = 2^(C_SIZE_MULT + 2)  = 2^(7 + 2) = 512
BLOCKNR   = (C_SIZE + 1) * MULT  = 1 * 512   = 512
BLOCK_LEN = 2^READ_BL_LEN        = 2^11      = 2048

memory capacity = 
BLOCKNR * BLOCK_LEN = 512 * 2048 = 1048576 bytes = 1024 KiB = 1 MiB

Ngoài ra, kiểm tra CRC7 cho đăng ký CSD là sai. Nó có thể là dữ liệu cũ để lại từ một trò tiêu khiển.

Những thanh ghi đó và nhiều hơn nữa có thể được truy vấn từ thẻ trực tiếp bằng các lệnh khác nhau. Điều này được thực hiện bởi trình điều khiển mô-đun, trung tâm thẻ, vv


Sẽ rất thú vị để xem những gì bạn tìm thấy bằng các lệnh được đưa ra bởi Stephane Chazelas, slm, v.v.


1

Tôi sẽ thử sử dụng sfdisklệnh trái ngược với dd. Ví dụ:

$ sudo sfdisk -d /dev/sda > /tmp/mbr_using_sfdisk.bin
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.

Bây giờ nhìn vào mbr_using_sfdisk.bincho thấy những gì bạn đang tìm kiếm:

$ more /tmp/mbr_using_sfdisk.bin
# partition table of /dev/sda
unit: sectors

/dev/sda1 : start=     2048, size=  2457600, Id= 7, bootable
/dev/sda2 : start=  2459648, size=314765312, Id= 7
/dev/sda3 : start=956291072, size= 20480000, Id= 7
/dev/sda4 : start=317224960, size=639066112, Id= 5
/dev/sda5 : start=317227008, size=  1024000, Id=83
/dev/sda6 : start=318253056, size=638038016, Id=8e

Vậy tại sao tôi không thể nhìn thấy bảng phân vùng bằng cách sử dụng dd?

Tôi không hoàn toàn chắc chắn tại sao nhưng tôi đã bắt gặp thủ thuật này chỉ cho bạn cách xem các bảng phân vùng trong lệnh của bạn mbr.binbằng cách sử dụng filelệnh.

Ví dụ:

$ sudo dd if=/dev/sda bs=512 count=1 of=mbr.bin
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000184924 s, 2.8 MB/s

$ file mbr.bin 
mbr.bin: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, boot drive 0x80, 1st sector stage2 0x12f0c26a, GRUB version 0.94; 
partition 1: ID=0x7, active, starthead 32, startsector 2048, 2457600 sectors; 
partition 2: ID=0x7, starthead 162, startsector 2459648, 314765312 sectors;
partition 3: ID=0x7, starthead 239, startsector 956291072, 20480000 sectors;
partition 4: ID=0x5, starthead 239, startsector 317224960, 639066112 sectors, code offset 0x48

Người giới thiệu


Tại sao mọi người nên sử dụng hexdumpcho đầu ra (văn bản thuần túy) sfdisk -d /dev/sda?
Hauke ​​Laging

Đó là một điểm tuyệt vời, tôi đã không nhận thấy đó là văn bản đơn giản. Tôi sẽ sửa nó trong câu trả lời 8-).
slm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.