我回答了这个问题,假设该*.img
文件的扇区大小为512
.
如何查询设备或设备的映像以找到正确的扇区大小?
答案1
fdisk -l
(参数中较低的 L)还将向您显示扇区大小等信息。
$ sudo fdisk -l
Disk /dev/sda: 150.3 GB, 150323855360 bytes
255 heads, 63 sectors/track, 18275 cylinders, total 293601280 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 63 208844 104391 83 Linux
/dev/sda2 208845 209712509 104751832+ 83 Linux
这表明扇区大小为 512 字节。
编辑:较新版本的fdisk
例如fdisk
(来自包util-linux 2.20.1
)还将向您显示逻辑和物理扇区大小。例如,“WDC WD10EFRX 1TB 驱动器”的相关输出:
Disk /dev/sdn: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
答案2
# cat /sys/block/sda/queue/hw_sector_size
512
答案3
人们可以只使用file(1)
命令并自己进行数学计算。即使您只有 FAT 系统的映像,此方法也有效。
例如:
$ sudo file -s /dev/sda5 | tr , '\n'
/dev/sda5: DOS/MBR boot sector
code offset 0x58+2
OEM-ID "mkfs.fat"
sectors/cluster 64
reserved sectors 64
Media descriptor 0xf8
sectors/track 63
heads 255
hidden sectors 147632128
sectors 536870912 (volumes > 32 MB)
FAT (32 bit)
sectors/FAT 65536
serial number 0x9f981691
unlabeled
该分区每个簇有 64 个扇区。每个扇区的字节数是默认的512,因此簇的大小是32KB。
请注意,扇区大小可以大于 512(FAT 规范将其限制为 4096,但您可以更大)。发生这种情况时,您将在输出中看到一个附加的“字节/扇区”字段。
$ sudo mkfs.fat -S 4096 -s 16 /dev/sda5
mkfs.fat 4.1 (2017-01-24)
$ sudo file -s /dev/sda5 | tr , '\n'
/dev/sda5: DOS/MBR boot sector
code offset 0x58+2
OEM-ID "mkfs.fat"
Bytes/sector 4096
sectors/cluster 16
Media descriptor 0xf8
sectors/track 63
heads 255
hidden sectors 147632128
sectors 67108864 (volumes > 32 MB)
FAT (32 bit)
sectors/FAT 4096
serial number 0xb059d826
label: unlabeled
再次计算一下,每个簇 4096 字节 × 16 扇区 = 64 KiB。
答案4
尝试这个
disk_sector_num=$(cat /sys/block/sdc/size)
disk_size_gb=$(expr $disk_sector_num / 2097152)
echo "sdc = ${disk_size_gb} GB"