硬盘(因历史原因,又被称为磁盘)与光盘因物理结构的差异,底层(PBA、物理块地址、Physical Block Address)使用不同的表达方式来进行寻址。如早期机械硬盘使用与软盘一致的CHS(柱面、磁头、扇区,Cylinder、Head、Sector)寻址,这样的方式有诸多限制:有限的柱面、磁头和扇区编号以及不同柱面的扇区数必须一致,导致了机械硬盘的性能与容量的提高受到限制,于是后期机械硬盘使用了其他方法进行寻址;对于NAND闪存固态硬盘,则区分片(die)、区(plane)、区块(block)、行(row)、页(page)、串(string)、浮栅晶体管;对于光盘,则区分区段、轨道以及扇区等。此外,对于某个特定的位置,不同的设备可进行的操作也不相同:如机械硬盘可能支持读取与写入(覆盖),而NAND闪存固态硬盘不能够覆盖,但又支持擦除操作等。
综上来看,不同的设备使用的物理寻址方式与支持的操作是不一致的,因此使用特定的硬件、固件或驱动程序来将其PBA统一转换为LBA(逻辑块地址、Logic Block Address)以及特定的单个块大小(常见的大小为512字节,4096字节少见且兼容性不如前者)(光盘的块大小为2048字节,但是在实际使用中人们似乎十分淡化光盘下块的概念,更没有提及PBA与LBA的区分,而更多的使用“分:秒:毫秒”这样的方法来表示位置。实际上我十分怀疑光盘并没有通用意义上的LBA概念,数据的逻辑位置与物理位置成一一对应关系;另一边,使用LMR和CMR的机械硬盘以及低端U盘、早期固态硬盘的PBA与LBA成相关性极强的线性关系,具体原因较复杂)。
总之,转换为LBA后我们理应可以统筹一致地对待所有能够存储数据的设备:它们都是一个单个块大小确定、具有一定块数量的线性存储空间。然而,光盘与其余存储设备在此又一次出现了分歧。
对于一般的存储设备而言,系统(广义上的,并不是单指操作系统(OS、Operating System))只需要直接使用LBA就可以存储数据。而实际使用中为了方便,一般会建立一个分区表(GPT(全局唯一标识符分区表、GUID(Gobal Unique IDentification) Partition Table)、MBR(主引导记录、Master Boot Record)等)来将不同范围的LBA划分为多个分区,并在数个分区上建立数个文件系统(FS、File System)(这一过程称为格式化(高级格式化、format)),之后便可在文件系统上存储文件。然而在实际应用中人们不会为光盘建立分区表并分区,而是直接在一整个存储空间上直接建立文件系统,因此我们无法在现有系统中为光盘分区、建立一定数量的文件系统并让其正常工作(甚至我们能够直接建立的文件系统的种类也十分有限,一般只有CDFS和UDF,而且这两种文件系统的标准极其混乱)(当然,我们可以通过写入镜像文件的方法来完成上述的一系列操作,只是即使正确完成也不会被系统成功识别)(有时在制作系统安装盘的时候软件所提供的USB-FDD启动方式就是指这种无分区表而直接建立文件系统的操作)。
最后来看看关于镜像文件的问题。将存储设备对应LBA上的原始数据直接保存成一个文件,其就是镜像文件(常见的后缀:.iso(常用于光盘镜像)与.img(常用于硬盘与软盘的镜像))。可以制作一个硬盘镜像文件(从硬盘,显然,它包含分区表),也可以制作一个分区镜像文件(从硬盘或光盘;显然地,*.iso大概率是一个分区镜像文件)。而在需要时,将镜像文件写回某个存储设备,或直接将其挂载使用。
就个人而言,使用Diskgenius来创建(从硬盘或新建)、编辑硬盘或分区镜像文件,并将其写回硬盘;使用Nero Burning ROM来创建(从光盘或新建)、编辑分区镜像文件并写入光盘;使用ImDisk Toolkit新建分区镜像文件、挂载分区或硬盘镜像文件(如果是从硬盘镜像文件,则只能挂载其中的一个分区),然后像使用本地硬盘、光盘一样使用;使用7zip来打开一个硬盘或分区镜像文件。
综上来看,不同的设备使用的物理寻址方式与支持的操作是不一致的,因此使用特定的硬件、固件或驱动程序来将其PBA统一转换为LBA(逻辑块地址、Logic Block Address)以及特定的单个块大小(常见的大小为512字节,4096字节少见且兼容性不如前者)(光盘的块大小为2048字节,但是在实际使用中人们似乎十分淡化光盘下块的概念,更没有提及PBA与LBA的区分,而更多的使用“分:秒:毫秒”这样的方法来表示位置。实际上我十分怀疑光盘并没有通用意义上的LBA概念,数据的逻辑位置与物理位置成一一对应关系;另一边,使用LMR和CMR的机械硬盘以及低端U盘、早期固态硬盘的PBA与LBA成相关性极强的线性关系,具体原因较复杂)。
总之,转换为LBA后我们理应可以统筹一致地对待所有能够存储数据的设备:它们都是一个单个块大小确定、具有一定块数量的线性存储空间。然而,光盘与其余存储设备在此又一次出现了分歧。
对于一般的存储设备而言,系统(广义上的,并不是单指操作系统(OS、Operating System))只需要直接使用LBA就可以存储数据。而实际使用中为了方便,一般会建立一个分区表(GPT(全局唯一标识符分区表、GUID(Gobal Unique IDentification) Partition Table)、MBR(主引导记录、Master Boot Record)等)来将不同范围的LBA划分为多个分区,并在数个分区上建立数个文件系统(FS、File System)(这一过程称为格式化(高级格式化、format)),之后便可在文件系统上存储文件。然而在实际应用中人们不会为光盘建立分区表并分区,而是直接在一整个存储空间上直接建立文件系统,因此我们无法在现有系统中为光盘分区、建立一定数量的文件系统并让其正常工作(甚至我们能够直接建立的文件系统的种类也十分有限,一般只有CDFS和UDF,而且这两种文件系统的标准极其混乱)(当然,我们可以通过写入镜像文件的方法来完成上述的一系列操作,只是即使正确完成也不会被系统成功识别)(有时在制作系统安装盘的时候软件所提供的USB-FDD启动方式就是指这种无分区表而直接建立文件系统的操作)。
最后来看看关于镜像文件的问题。将存储设备对应LBA上的原始数据直接保存成一个文件,其就是镜像文件(常见的后缀:.iso(常用于光盘镜像)与.img(常用于硬盘与软盘的镜像))。可以制作一个硬盘镜像文件(从硬盘,显然,它包含分区表),也可以制作一个分区镜像文件(从硬盘或光盘;显然地,*.iso大概率是一个分区镜像文件)。而在需要时,将镜像文件写回某个存储设备,或直接将其挂载使用。
就个人而言,使用Diskgenius来创建(从硬盘或新建)、编辑硬盘或分区镜像文件,并将其写回硬盘;使用Nero Burning ROM来创建(从光盘或新建)、编辑分区镜像文件并写入光盘;使用ImDisk Toolkit新建分区镜像文件、挂载分区或硬盘镜像文件(如果是从硬盘镜像文件,则只能挂载其中的一个分区),然后像使用本地硬盘、光盘一样使用;使用7zip来打开一个硬盘或分区镜像文件。