0
点赞
收藏
分享

微信扫一扫

Linux学习7 磁盘与分区的基础知识


Linux学习7 磁盘与分区基础知识

  • ​​一、硬盘分类​​
  • ​​1. SAS 硬盘​​
  • ​​2. SATA​​
  • ​​3. SSD硬盘​​
  • ​​4. SCSI硬盘​​
  • ​​5. IDE硬盘​​
  • ​​二、磁盘知识​​
  • ​​三、在深度系统中打开分区编辑器查看磁盘信息:​​
  • ​​四、分区表​​
  • ​​1. 下面重点看看MBR分区表​​
  • ​​在深度系统使用下面命令读取MBR记录:​​
  • ​​使用C从扇区读取文件​​
  • ​​扩展分区​​
  • ​​2. GPT分区(GUID Partition Table)​​
  • ​​五、Linux的磁盘文件名​​
  • ​​六、Linux 常用的文件格式​​
  • ​​七、索引节点inode​​
  • ​​八、交换分区​​
  • ​​1. 基本概念​​
  • ​​2. 一些操作命令​​
  • ​​九、几个分区命令​​

一、硬盘分类

1. SAS 硬盘

(Serial Attached SCSI)即串行连接SCSI接口硬盘,是新一代的SCSI技术,和现在流行 Serial ATA(SATA)硬盘硬盘相同,更高速度、缩短连结线,向下兼容SATA。

Linux学习7 磁盘与分区的基础知识_磁道

SAS与SATA对比:
Linux学习7 磁盘与分区的基础知识_存储_02

SAS接口:
Linux学习7 磁盘与分区的基础知识_linux_03
尺寸一般有两种:

  • 3.5英寸SAS
  • 2.5英寸SAS,一般笔记本使用。

示例:希捷300GB/15000转/SAS(ST3300657SS)

  • 缓存:64M
  • 接口速率:6Gb/s
  • 平均寻道时间:3.4/3.9ms
  • 参考价:1350

网上购买SAS时,会发现有T级的企业级SAS,但价格会比300G的便宜。要看转速是7200转还是15000转。真正SAS盘目前是300G/600G。

  • 真SAS盘:容量 146G/300G/600G 转速15K/10K。缓存64M/128M。接口速率3Gb/s或6Gb/s。
  • 假SAS盘:1T/2T , 7200转。容量大、便宜、支持热插拔。SATA盘体+SAS接口。在存储上用的比较多。

2. SATA

SATA(Serial ATA)硬盘,又称串口硬盘,用来取代传统的PATA硬盘。由Intel、APT、Dell、IBM、希捷、迈拓这几大厂商组成的Serial ATA委员会在2002年确认了Serial ATA 2.0规范。
Linux学习7 磁盘与分区的基础知识_磁道_04

示例:希捷500G/7200转/SATA(ST9500530NS)

  • 企业级SATA。
  • 接口速率:3Gb/s
  • 盘体尺寸:2.5英寸
  • 缓存:128M
  • 参考报价:1200

3. SSD硬盘

固态硬盘,由控制单元和存储单元(Flash/dram)组成,使用SATA接口。
Linux学习7 磁盘与分区的基础知识_存储_05

示例:Intel SSD 520Series

  • 240G,
  • 参考:1140元

4. SCSI硬盘

过时的硬盘。
示例:ST3146707LW
缓存:8M
Linux学习7 磁盘与分区的基础知识_rhel_06

5. IDE硬盘

IDE即Integrated Drive Electronics,控制器与盘体集成在一起的硬盘驱动器,IDE是表示硬盘的传输接口。常说的IDE接口,也称为ATA、PATA接口。
Linux学习7 磁盘与分区的基础知识_磁道_07

其并行传输时,8位互相干扰。速度越快,干扰越大,传输出错时,要同时重新专8位。串口传输的时钟频率比并口高。

二、磁盘知识

Linux学习7 磁盘与分区的基础知识_磁盘_08
(图片来源博客源尖尖毛草博客)

传统的机配磁盘由盘片、机械臂、马达构成。 一块磁盘会有多个盘片。

  • 磁道:盘片上一圈圈灰色同心圆。
  • 扇区:磁道上一段圆弧,盘片上最小的物理存储单位,主要有512B和4KB两种格式。

Linux学习7 磁盘与分区的基础知识_磁道_09
(图片来源:博客园尖尖毛草博客)

  • 柱面:扇区组成一个圆,上图中蓝色部分。 一个盘片上下两面都可读写,使用两个磁头读写。

Linux学习7 磁盘与分区的基础知识_linux_10

老式磁盘中,每个磁道的扇区数是相等的,所以越往圆心存储密度越高。
现代磁盘改为等密度结构,外围磁道的扇区数量大于内圈磁道,寻址方式也改为以扇区为单位的线性寻址。 为了与老式3D寻址兼容,现代磁盘控制器使用地址翻译器把3D寻址参数转为线性参数。

三、在深度系统中打开分区编辑器查看磁盘信息:

Linux学习7 磁盘与分区的基础知识_linux_11
Linux学习7 磁盘与分区的基础知识_rhel_12

四、分区表

早期的分区以柱面为最小分区单位;现在的分区通常使用扇区为最小分区单位。每个扇区有一个自己的号码。磁盘分区表主要有MBR和GPT两种格式,GPT格式可以支持2T以上容量。

  • 主分区:一块硬盘取多4个主分区。主分区激活就可以用来启动。
  • 扩展分区:早期设计的硬盘只能分4个分区。后来建了sda4做为扩展分区,称为逻辑分区。
  • 逻辑分区可以有很多个。
  • Linux限制,一块硬盘主分区+扩展分区 最多只有4个。计算机的分区多于4个余下空间不能使用。

1. 下面重点看看MBR分区表

早期的Linux为了兼容Windows的磁盘,使用了支持Windows的MBR。MBR全称是Master Boot Record,通常放在磁盘的第一个扇区。这个扇区通常为512字节大小,当中包括两种东西:

  • 主引导记录:446字节
  • 分区表:64字节,最多只能有4组记录区,每组记录区记录该区起止柱面号码。

在深度系统使用下面命令读取MBR记录:

sudo dd if=/dev/sda  of=~/bootsector bs=512 count=1

使用​​vim -b ~/bootsector​​​打开查看 (在vim命令模式下输入​​:%!xxd​​ 显示16进制模式)

Linux学习7 磁盘与分区的基础知识_磁盘_13
末尾的55aa是标志位,图中选中的 ​​​8020​​开始即第一个分区信息,

  • 第1字节80 表示是活动分区(00表示非活动分区)
  • 第5字节83表示分区类型是Linux分区(8e为Linux LVM分区)

如果要改动文件,可以使用

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,"%08x:", i*16+start);
for(j = 0; j < 16; j++){
fprintf(stdout, " %02x", (int)buf[i*16+j] & 0xFF);
}
fprintf(stdout,"\n");
fflush(stdout);
}
count -= size;
start += size;
}
}

​gcc​​编译运行:

Linux学习7 磁盘与分区的基础知识_磁道_14

扩展分区

分区记录里分一个扩展分区出来,然后在扩展分区前几个扇区用来再记录逻辑分区。
Linux的SATA硬盘逻辑分区可以突破63个。

2. GPT分区(GUID Partition Table)

由于 MBR分区 每个分区表只有16字节,一个分区被限制最大只能使用2.2TB的磁盘。
GPT将扇区以逻辑区块(Logincal Block Address,LBA)来处理,一个LBA默认512字节,第一个LBA就是LBA0.

  • GPT使用了34个LBA来记录分区信息
  • GPT把磁盘的最后34个LBA拿来作备份。
  • LBA0:用来兼容MBR,存储了启动引导程序。
  • LBA1:GPT表头记录
  • LBA2-33:实际记录分区信息,每个LBA放4组分区记录,每组记录用到128字节空间。GPT分区表对单一分区容量限制达8ZB(1ZB=230TB)
    GPT 没有了主分区、逻辑分区的区分 。

五、Linux的磁盘文件名

  • 老的ide接口,使用​​/dev/hd​​开头,现在已经很少使用;
  • 现在物理磁盘一般模拟成​​/dev/sd[a-p]​​​格式,第一块磁盘为​​/dev/sda​​​;
    分区的文件名以第一块磁盘为例,为​​​/dev/sda[1-128]​​。
  • 虚拟机的磁盘通常是​​/dev/vd[a-p]​​ (比如用阿里的ECS)
  • 磁盘阵列通常是​​/dev/md[0-128]​
  • LVM是​​/dev/VGNAME/LVNAME​

六、Linux 常用的文件格式

Linux较早的文件系统使用的是ext2。
centos6: 以ext4为主 。
centos7: 以xfs为主,大文件系统,日志型 ,文件可以修复。
执行命令: cat /etc/fstab

七、索引节点inode

每个存储设备或存储设备的分区被格式化为文件系统后有两部分:block+inode
文件存储在硬盘上,最小存储单位是扇区,每个扇区可能是512Byte。但操作系统读取硬盘时,不会一个一个扇区读,而是一次性连续读多个扇区,多个扇区称为一个“块”。
多个扇区组成的块,是文件存取的最小单位。
“块”的大小,常见的有4B,即连续8个扇区。块用来存储数据,而inode用来存储这些数据元信息,主要包括:

  • 文件大小
  • 文件所属用户User ID
  • 文件的Group ID
  • 文件的读/写权限
  • 文件的时间戳
  • 链接数
  • 文件数据Block的位置
    inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,可以通过inode值快速找到相对应的文件。

使用stat命令可以查看文件的inode信息:

$ stat linux2-4.mov
16777220 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总数和已经使用的数量。

八、交换分区

1. 基本概念

Linux的交换分区类似于Windows的虚拟内存,把硬盘虚拟一块充当内存使用。
在安装Linux时,一般建议安装一个根分区、一个交换分区。
Linux下可以创建两种类型的交换空间:

  • swap分区(适合有空闲的分区可使用)
  • swap文件适合于没有空的硬盘分区,硬盘的空间都已经分配完毕。

2. 一些操作命令

# 查看磁盘空间占用情况
free -h
# 查看交换分区的位置
swapon -s
# 停掉swap分区,注意剩余的内存比swap的内存的空间要大,否则可能会宕机。这一步比较慢。
swapoff /swapfile # /swapfile是上面一步swapon -s 显示的位置
free -h
# 启动swap分区
swapon -a

九、几个分区命令

# 分区查看
lsblk
# 查看lvm物理分段
pvdisplay -v -m
# 查看分区表
sudo fdisk -l


举报

相关推荐

0 条评论