介绍
当我们买回来了一个16G的U盘(其他3.5英寸、2.5英寸硬盘,SSD、NVME同理)。我们需要经过 分区、格式化、挂载多个步骤才能被我们使用。下面我们一一分解。
以上图片来自于 Storage and Hard Drives 101
分区
windows分区工具很多,就不多说了,比如 DiskGenius简单易用。
这里写一下linux下分区工具的使用
前导知识 1000还是1024
我们常用的4G内存,指的是什么呢? 一般指我们的内存可以存储这么多字节
4(Gb) * 1024(Mb) * 1024 (Kb) * 1024 (Byte) = 4294967296(Byte)
我们常说的16G硬盘,指的是什么呢?
硬盘厂商认为
16(Gb) * 1000(Mb) * 1000 (Kb) * 1000(Byte) = 16000000000(Byte)
有些操作系统认为 硬盘是14.9(Gb)
16000000000 / 1024 / 1024/ 1024 = 14.9(Gb)
到底是1000还是1024,不同操作系统不一样,但是硬盘厂家是统一的 1000!
前导知识 扇区
扇区(sector)原来是机械磁盘特有的概念,这个概念被其他类型磁盘也继承了,表示512字节为单位的一个区块。
比如我们有20G的磁盘,我们就有41943040个扇区
21474836480 / 512 = 41943040 (个)
我们第一个扇区是 0 号 扇区,最后一个是 41943039 号 扇区。
前导知识 MBR vs GPT
这里只说一下 MBR,并且同时特指 最经典的Intel CPU识别的MBR。
我们看一下。所谓的 主引导记录 就是第一个扇区(0号扇区)。
从第一个扇区的 446字节 偏移处开始,一共64字节(每个分区16字节),记录了最多4个分区。
分区 parted
sudo parted /dev/sda mklabel msdos
sudo parted /dev/sda mkpart primary 0% 100%
sudo partprobe
- 第一条命令 初始化MBR扇区
- 第二条命令 创建一个主分区,从开始到结束,这里开始是第2048个扇区。
- 第三条命令 重新加载分区表,使系统能识别(有些系统不需要这条命令)
TIPS
有些同学会问,那从第一个扇区到第2048个扇区之间的空间怎么办呢?这是个好问题。
可以算一下,这个2048个扇区其实就是1Mb。
这是由于现在磁盘都比较大,不在乎这1M大小,所以文件系统都按照1M对齐。
一般这一部分扇区,不属于分区。一些操作系统、病毒、Bootloader或者杀毒软件 会在这些扇区上写入一些内容。这将导致,即使格式化了整个分区,甚至重新分区,重装系统也无法清除这些扇区上的内容。
比如在30年前 DOS年代,Michelangelo 病毒会把MBR移动到第7号扇区,并把0号扇区 替换成病毒,达到一开机,就中毒的效果。
更多阅读
- An Examination of theWindows™ 7, 8/8.1 or 10MBR ( Master Boot Record)
- Why does the partition start on sector 2048 instead of 63?
- Why do Windows and Linux leave 1MiB unused before first partition?
查看分区
根据定义,我们可以查看用如下代码查看分区
with open("/dev/sda", "rb") as f:
f.seek(446)
for i in range(1, 5):
print("分区表%s: "%i, end=" ")
for j in range(0, 16):
print("%02x"%f.read(1)[0], end=" ")
print()
根据定义
分区开始是: 0x 00 00 08 00 = 2048
分区总扇区数量: 0x 02 7f f8 00 = 41940992
由命令查看
完美符合!
格式化
分完区之后, 分别格式化成不同的文件系统
sudo mkfs.xfs /dev/sda1
sudo mkfs.ext4 /dev/sda1
sudo mkfs.ntfs /dev/sda1
sudo mkfs.exfat /dev/sda1
不同文件系统有不同的组织形式,性能特性。更具不同需求选择不同文件系统。
挂载
挂载文件系统到某一个目录
sudo mount /dev/sda1 /mnt
这时候,我们就可以使用这个硬盘空间了。