Linux设备与存储精读 · L04-01 | 扇区、LBA、块大小对照与容量换算:字节、MiB、十六进制
模块L04 存储介质与分区篇号L04-01 / 38预计阅读45 分钟主线Linux 设备与存储文章目录本篇目标30 秒速览正文1. 为什么先练换算2. 扇区与 LBA3. 三种「块」别叫混4. KB/MB 与 KiB/MiB5. 十六进制容量与地址5.1 hex → 十进制字节 → MiB5.2 MiB → hex5.3 用计算器 / shell 复核6. 地址起始 长度 下一起始预告7. 和 blockdev / df 的读数对齐8. 换算作业纸建议固定步骤Android 对照检查清单练习判断题对 / 错换算题操作题本篇边界下一篇预告本篇目标把分区表 / scatter 里出现的数字算准分清扇区、LBA、设备块、文件系统块并能在字节 ↔ MiB/GiB ↔ 十六进制之间熟练换算。学完后看到0x12C00000能立刻得出「300 MiB」并知道blockdev量到的是哪一种「大小」。30 秒速览扇区sector磁盘地址的最小常规单位逻辑上常见 512B也有 4KiB。LBALogical Block Address从 0 起的扇区编号。不要混扇区大小 ≠ 文件系统 block size ≠ 内存 page size。分区容量换算优先用MiB 1024×1024 字节与许多 Android/scatter 习惯一致。十六进制地址/长度直接按字节算字节 hexMiB 字节 / 1048576。探针blockdev --getss扇区、--getsize64字节容量、stat -f/tune2fs看 FS 块后话。正文1. 为什么先练换算分区相关配置里同一容量会以不同面目出现300 MiB 314572800 十进制字节 0x12C00000 十六进制字节 614400 若按 512 字节扇区计的扇区数算错一位scatter 上相邻分区就会重叠或留下空洞L04-04。本篇只练「单位与地址语言」分区是什么见 L04-02。2. 扇区与 LBA把存储介质想成一条很长的字节带。为了寻址把它切成等长小格扇区 0 扇区 1 扇区 2 ... |····| |····| |····| 512B 512B 512B ← 示例逻辑扇区 512 字节扇区大小每一格多少字节。传统常见512部分设备逻辑扇区仍是 512物理介质可能是 4KiB4K native——排障时以工具读到的逻辑扇区为准。LBALogical Block Address扇区编号一般从0起。字节偏移与 LBA 的关系逻辑扇区大小为S时字节偏移 ≈ LBA × S LBA ≈ 字节偏移 / S示例S 512LBA 8 → 字节偏移 4096。# 远程服务器 / 有权限时sudoblockdev--getss/dev/sda# 常见输出512# Android常需 root节点名因机而异adb shell blockdev--getss/dev/block/mmcblk0--getsssector size扇区大小字节。3. 三种「块」别叫混名称典型大小谁在用本篇关系扇区 / 逻辑块设备512 或 4096块设备、LBA分区表地址常落到扇区/字节文件系统块block常 4KiBext4/f2fs 等文件数据按 FS 块分配影响df与元数据L06/L11页page常 4KiBMMU / 部分闪存讨论与扇区不必相等本专栏不深挖设备侧 [扇区][扇区][扇区]... 文件系统 [ FS block 常 8 个 512B 扇区 ]问「分区有多大」→ 用设备字节数 / 扇区数。问「文件占了多少 FS 空间」→ 常按文件系统块对齐L11。# 设备扇区sudoblockdev--getss/dev/loop0# 设备总字节sudoblockdev--getsize64/dev/loop0# 文件系统块大小已挂载路径实现不同stat-f-c%S/mnt/point2/dev/null# 有的系统 %S基础块大小4. KB/MB 与 KiB/MiB写法含义字节KiB10241024MiB1024²1 048 576GiB1024³1 073 741 824KB/MB/GB十进制习惯1000 / 1000² / 1000³盘符宣传容量常用Android 分区与 scatter **多数按 1024 进制MiB**谈「300MB 分区」。本专栏约定未加说明的「MiB / 分区 MB」→ 按 1024 进制 宣传用磁盘「500GB」→ 可能是 1000 进制换算时先问清换算字节 → MiB : 除以 1048576即 1024×1024 MiB → 字节 : 乘以 10485765. 十六进制容量与地址scatter / 文档里常见大小 0x12C00000 起始 0x288500000这里的 hex直接表示字节数或字节地址以具体文件字段定义为准MTK scatter 里 partition size / start 多为字节。5.1 hex → 十进制字节 → MiB以0x12C00000为例0x12C00000 1×16^7 2×16^6 C×16^5 314572800 字节 314572800 ÷ 1048576 300 → 300 MiB心算技巧熟悉若干「整 MiB」的 hex1 MiB 1024×1024 0x100000 2 MiB 0x200000 4 MiB 0x400000 8 MiB 0x800000 16 MiB 0x1000000 32 MiB 0x2000000 64 MiB 0x4000000 128 MiB 0x8000000 256 MiB 0x10000000 300 MiB 256MiB44MiB 0x10000000 0x2C00000 0x12C00000 512 MiB 0x20000000 1 GiB 0x400000005.2 MiB → hex5 MiB 5 × 0x100000 0x500000 300 MiB 300 × 0x100000 0x12C000005.3 用计算器 / shell 复核远程服务器# hex → 十进制printf%d\n0x12C00000# 十进制 → MiB整除echo$((0x12C00000/1024/1024))# MiB → hexprintf0x%X\n$((300*1024*1024))# 扇区数512B 扇区echo$((0x12C00000/512))Androidtoybox若支持printf/echo $(( ))同样可算否则在服务器算准再回填配置。6. 地址起始 长度 下一起始预告连续两个分区字节地址分区 A start S 分区 A size L 分区 B start S L ← 紧挨、无重叠、无空洞数值示例与常见 scatter 写法同形productiondata start 0x288500000 productiondata size 0x12C00000 ( 300 MiB) userdata start 0x29B100000 校验0x288500000 0x12C00000 0x29B100000printf0x%X\n$((0x2885000000x12C00000))# 应输出 0x29B100000本篇先会算重叠 / 空洞的工程含义见 L04-04。7. 和blockdev/df的读数对齐探针量的是什么blockdev --getsize64 DEV设备/分区总字节原始容量blockdev --getss DEV逻辑扇区字节数blockdev --getsz DEV512 字节单位的扇区数历史接口注意定义df -h /mount文件系统视角的容量小于等于原始分区是常态adb shell blockdev--getsize64/dev/block/by-name/userdata# 输出一串十进制字节再自己 / 1048576 得 MiBgetsize64结果换成 hex应能与分区表长度字段对上允许厂商对齐填充导致略有差异L04-03/04。8. 换算作业纸建议固定步骤拿到一个长度字段时1确认单位字节扇区MiB 2若是 hex 字节→ 十进制字节 → ÷1048576 → MiB 3若是 MiB→ ×1048576 → 十进制/hex 字节 4若需扇区数字节 ÷ 扇区大小先 getss且整除 5用 printf/$(( )) 复核再写进表格Android 对照出现位置常见形态MTK scatterstart / size 多为hex 字节需求文档「300MB 分区」→ 按300 MiB理解并换算blockdev --getsize64十进制字节验收用df -h不要当成分区表精确长度adb root adb shell blockdev--getss/dev/block/mmcblk0 adb shell blockdev--getsize64/dev/block/by-name/userdata把getsize64的输出拿到服务器BYTES...# 粘贴echo$((BYTES/1024/1024))# MiBprintf0x%X\n$BYTES# hex检查清单能解释扇区与 LBA能区分设备扇区、FS 块、page坚持分区换算用 MiB1024²会做 hex 字节 ↔ 十进制 ↔ MiB会用printf/$(( ))复核知道getsize64与df不是同一口径练习判断题对 / 错LBA 就是以字节为单位的偏移。0x100000等于 1 MiB。分区表里的长度和df -h显示的 Size 必须永远相等。300×1024×1024 的十六进制是0x12C00000。参考答案错。LBA 是扇区号字节偏移 ≈ LBA×扇区大小。对。错。df是文件系统视角通常更小。对。换算题0x500000 ? MiB5 MiB ? hex 字节0x12C00000在 512B 扇区下 ? 个扇区计算0x288500000 0x12C00000 ?参考答案5 MiB0x5000000x12C00000 / 512 6144000x29B100000操作题远程服务器printf%d\n0x12C00000echo$((0x12C00000/1024/1024))printf0x%X\n$((300*1024*1024))printf0x%X\n$((0x2885000000x12C00000))# 可选loop 上看扇区ddif/dev/zeroof/tmp/sz.imgbs1Mcount8statusnonesudolosetup-f--show/tmp/sz.imgDEV$(sudolosetup-j/tmp/sz.img|cut-d:-f1)sudoblockdev--getss$DEVsudoblockdev--getsize64$DEVsudolosetup-d$DEVrm-f/tmp/sz.imgAndroidadb shell blockdev--getss/dev/block/mmcblk0 adb shell blockdev--getsize64/dev/block/by-name/userdata把 userdata 字节数换算成 MiB 与 hex记在笔记里。本篇边界不讲 GPT 字段细节与parted选项精读L04-03不讲重叠/空洞工程判定全文L04-04不讲 eMMC/UFS 硬件分区 vs 用户区L04-02不讲 FS 块与df差多少的定量模型L11下一篇预告L04-02《分区本质上是什么地址范围以及 eMMC/UFS 用户区认知》— 把「一段连续地址」钉成分区定义。

相关新闻