发布时间:2026-07-21阅读(1)

(图片来源博客源尖尖毛草博客)
传统的机配磁盘由盘片、机械臂、马达构成。 一块磁盘会有多个盘片。

(图片来源:博客园尖尖毛草博客)
计算存储容量=存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数磁道扇区柱面三个参数计算存储容量 = 存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数磁道 扇区 柱面 三个参数计算存储容量=存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数磁道扇区柱面三个参数
老式磁盘中,每个磁道的扇区数是相等的,所以越往圆心存储密度越高。现代磁盘改为等密度结构,外围磁道的扇区数量大于内圈磁道,寻址方式也改为以扇区为单位的线性寻址。 为了与老式3D寻址兼容,现代磁盘控制器使用地址翻译器把3D寻址参数转为线性参数。
二、在深度系统中打开分区编辑器查看磁盘信息:

早期的分区以柱面为最小分区单位;现在的分区通常使用扇区为最小分区单位。每个扇区有一个自己的号码。磁盘分区表主要有MBR和GPT两种格式,GPT格式可以支持2T以上容量。
早期的Linux为了兼容Windows的磁盘,使用了支持Windows的MBR。MBR全称是Master Boot Record,通常放在磁盘的第一个扇区。这个扇区通常为512字节大小,当中包括两种东西:
sudo dd if=/dev/sda of=~/bootsector bs=512 count=1
使用vim -b ~/bootsector打开查看 (在vim命令模式下输入:%!xxd 显示16进制模式)

末尾的55aa是标志位,图中选中的 8020开始即第一个分区信息,
如果要改动文件,可以使用
sudo dd if=~/bootsector of=/dev/sda bs=512 count=1
写回磁盘。
使用C从扇区读取文件#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <libgen.h>#include <unistd.h>static void usage(char *prog_name){ fprintf(stderr, "usage: %s device start count\n", prog_name); fprintf(stderr, "example: %s /dev/sda 0 512\n", prog_name);}int main(int argc, char *argv[]){ char buf[4096]; int fd = 0; int i = 0; int j = 0; int start = 0; int count = 0; char *device = NULL; if(argc != 4){ usage(basename(argv[0])); exit(1); } device = argv[1]; start = atol(argv[2]); count = atol(argv[3]); // 把磁盘像文件一样打开 fd = open(device, O_RDONLY); if(-1 == fd){ fprintf(stderr, "cannot open device"); exit(1); } // 找到起始位置 if(lseek(fd, start, SEEK_SET) != start){ fprintf(stderr, "cannot seek at %d", start); exit(1); } // 挨个字节读出来 while(count > 0){ int size = count > sizeof(buf) ? sizeof(buf) : count; read(fd, buf, size); /* 每行显示16个字节 每两个字节间以空格分开 */ for(i = 0; i < size/16; i ){ fprintf(stdout,"x:", i*16 start); for(j = 0; j < 16; j ){ fprintf(stdout, " x", (int)buf[i*16 j] & 0xFF); } fprintf(stdout,"\n"); fflush(stdout); } count -= size; start = size; }}
gcc编译运行:

分区记录里分一个扩展分区出来,然后在扩展分区前几个扇区用来再记录逻辑分区。Linux的SATA硬盘逻辑分区可以突破63个。
2. GPT分区(GUID Partition Table)由于 MBR分区 每个分区表只有16字节,一个分区被限制最大只能使用2.2TB的磁盘。GPT将扇区以逻辑区块(Logincal Block Address,LBA)来处理,一个LBA默认512字节,第一个LBA就是LBA0.
Linux较早的文件系统使用的是ext2。centos6: 以ext4为主 。centos7: 以xfs为主,大文件系统,日志型 ,文件可以修复。执行命令: cat /etc/fstab
六、索引节点inode每个存储设备或存储设备的分区被格式化为文件系统后有两部分:block inode文件存储在硬盘上,最小存储单位是扇区,每个扇区可能是512Byte。但操作系统读取硬盘时,不会一个一个扇区读,而是一次性连续读多个扇区,多个扇区称为一个“块”。多个扇区组成的块,是文件存取的最小单位。“块”的大小,常见的有4B,即连续8个扇区。块用来存储数据,而inode用来存储这些数据元信息,主要包括:
使用stat命令可以查看文件的inode信息:
$ stat linux2-4.mov16777220 3753644 -rw-r--r-- 1 apple staff 0 674287083 "Jul 9 23:49:23 2020" "Jul 9 23:07:22 2020" "Jul 9 23:07:23 2020" "Jul 9 23:07:08 2020" 4096 1344096 0 linux2-4.mov
硬盘在格式化的时候,操作系统会将硬盘分成两个区域:数据区、inode区。每个inode节点的大小一般为128B或256B;inode节点的数量在格式化时给定,一般是每1K或每2K设置一个inode。
如果一块1G的硬盘,每个inode节点大小为128B,每1K就设置一个inode,那inode占的空间会达到128M,占硬盘的12.8%。
df -i 命令可以查看每个硬盘分区的inode总数和已经使用的数量。
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图