磁盘

222 阅读14分钟

硬盘物理结构

盘片:硬盘有多个盘片,每盘片有2面(正反两面)

磁头:每面一个磁头,并不是只有一个磁头,磁头也不会碰到盘面,磁头等于盘片数量

硬盘的数据结构

  • 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据(扇区越多容量越大)
  • 磁道:同一盘片不同半径的同心圆
  • 柱面:不同盘片相同半径构成的圆(柱面和磁道数量相同)

硬盘存储容量

  • 硬盘存储容量=磁头数(8个2进制)×磁道(柱面)数×每道扇区数(6个二进制)×每扇区字节数

    1柱面=512 * 扇区数/磁头数×磁道=512* 63*255=7.84M

  • 可以用柱面/磁头/扇区来唯一定位磁盘上每一个区域

硬盘接口类

  • SATA:6Gbps,SATA数据端口与电源(长的电源,数据线短的)端口是分开的,即需要两条线,一条数据线,一条电源线
  • SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而SATA中不包含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不行。

机械与固态

机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电 机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴 上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直 径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径 方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操 作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精 密设备,进入硬盘的空气必须过滤。

固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单 元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的 完全相同,在产品外形和尺寸上也与普通硬盘一致。

MBR与磁盘分区

分区的优点

  • 优化I/O性能
  • 实现磁盘空间配额限制
  • 提高修复速度
  • 隔离系统和程序
  • 安装多个OS
  • 采用不同文件系统

MBR分区

MBR:Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T

  1. 446bytes: boot loader 启动相关
  2. 64bytes:分区表,其中每16bytes标识一个分区
  3. 2bytes: 55AA

MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)

MBR分区:主和扩展分区对应的1--4,/dev/sda3,逻辑分区从5开始,/dev/sda5

GPT分区

GPT: 支持128个分区,使用64位,支持8Z(512Byte/block )64Z ( 4096Byte/block)

使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动。

文件系统

是操作系统用于明确存储设备或分区上的文件的使用方法和数据结构;即在存储设备上组织使用文件的 方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进 行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的 存取,安全控制,日志,压缩,加密等。

总结:用来管理(增删改查恢复)文件的程序

示例

[root@localhost ~]# cat /proc/filesystems
nodev	sysfs
nodev	rootfs
nodev	ramfs
nodev	bdev
nodev	proc
nodev	cgroup
nodev	cpuset
nodev	tmpfs
nodev	devtmpfs
nodev	debugfs
nodev	securityfs
nodev	sockfs
nodev	pipefs
nodev	anon_inodefs
nodev	configfs
nodev	devpts
nodev	hugetlbfs
nodev	autofs
nodev	pstore
nodev	mqueue
nodev	selinuxfs
	xfs
nodev	rpc_pipefs
nodev	nfsd
	fuseblk
nodev	fuse
nodev	fusectl
	iso9660
	ext3
	ext2
	ext4
	vfat

复制代码

XFS

  • 根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
  • 用优化算法,日志记录对整体文件操作影响非常小
  • 是一个全64-bit的文件系统,最大可以支持8EB的文件系统,1EB=1024PB1PB=1024TB(这里才到TB1TB=1024GB
  • 而支持单个文件则达到8EB能以接近裸设备I/O的性能存储

swap

swap交换分区是系统RAM的补充,swap 分区支持虚拟内存。当没有足够的 RAM 保存系统处理的数据 时会将数据写入 swap 分区,当系统缺乏 swap 空间时,内核会因 RAM 内存耗尽而终止进程。配置过 多 swap 空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖内存不足。

FAT16、FAT32

且最大只能支持32GB分区,单个文件也只能支持最大4GB。

NTFS(xfs)

NTFS文件系统所具备3个功能:错误预警功能、磁盘自我修复功能和日志功能,单个文件64GB

EXT4

Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分 区是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件 (16TB)、最大1EB的文件系统,以及速度的提升1EB=1024PB=1024TB

JFS

主要是为满足服务器的高吞吐量和可靠性需求而设计、开发的。单个文件最大限制16TB,该文件系统最大支持1PB的容量。1PB=1024TB

分区工具

fdisk

格式

fdisk -l [磁盘设备]

fdisk [磁盘设备]
复制代码
选项作用
m打印出菜单
p打印出当前分区表
n新建一个分区
d删除一个分区
t改变分区的属性,系统ID
w保存
q不保存退出

示例

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x54de8b9f

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux
/dev/sdb2        10487808    31459327    10485760    5  Extended
/dev/sdb5        10489856    14684159     2097152   83  Linux
/dev/sdb6        18882560    23076863     2097152   83  Linux

复制代码

blkid

查看块设备属性信息

示例

[root@localhost ~]# blkid 
/dev/sda1: UUID="90a6897e-d514-4ecc-8abd-637666102244" TYPE="xfs" 
/dev/sda2: UUID="JiWR9a-GOyJ-T2da-3ECl-zR5S-cBNw-tfVwHq" TYPE="LVM2_member" 
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sdb1: UUID="ff5693ec-be3c-43a9-921d-5b35df72c5fa" TYPE="xfs" 
/dev/sdb5: UUID="bf02cd4e-a35d-4284-8e46-b70ffb5f3ced" TYPE="xfs" 
/dev/mapper/centos-root: UUID="e7a14395-412e-4fdf-9bbe-1e58ab4b2e3b" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="d9573ac3-d0ad-469b-81ad-2c98fe57196d" TYPE="swap" 
/dev/sdc1: UUID="a0009d5f-1122-44e7-a33d-ab54c73d3083" TYPE="swap" 
/dev/sdd1: UUID="477025fa-4342-449e-9a84-261ebf1e8f2d" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="84211e3e-2ad9-44d4-85b3-1e2ee5aca73b" 

复制代码

mkfs

创建文件系统(格式化)

选项作用
-t指定文件系统类型
-b指定块 block 大小
-L设置卷标
-j相当于 -t ext3
-i为数据空间中每多少个字节创建一个inode;不应该小于block大小
-N指定分区中创建多少个inode
-I记录占用的磁盘空间大小
-m默认5%,为管理人员预留空间占总空间的百分比
-o启用指定特性
-a自动修复
-r交互式修复错误

示例

[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
复制代码

mkswap

swap

特殊的文件系统,缓解内存不足,为了个别应为程序加内存有点浪费

添加交换分区的空间

mkswap + 分区

swapon +分区 开启 -a 全部

swapoff +分区 关闭 -a 全部

[root@localhost ~]# mkswap /dev/sdc1
正在设置交换空间版本 1,大小 = 15728636 KiB
无标签,UUID=a0009d5f-1122-44e7-a33d-ab54c73d3083
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        734M        732M         10M        517M        1.0G
Swap:          4.0G          0B        4.0G
[root@localhost ~]# swapon
NAME      TYPE      SIZE USED PRIO
/dev/dm-1 partition   4G   0B   -1
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        734M        732M         10M        517M        1.0G
Swap:          4.0G          0B        4.0G
[root@localhost ~]# swapon /dev/sdc1
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        746M        720M         10M        517M        1.0G
Swap:           18G          0B         18G
[root@localhost ~]# swapoff /dev/sdc1
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        736M        730M         10M        517M        1.0G
Swap:          4.0G          0B        4.0G
复制代码

lsblk

[root@localhost ~]# lsblk -d -o name,rota
NAME ROTA
sda     1
sdb     1
sdc     1
sdd     1
sr0     1
复制代码

挂载与解挂载

mount

mount [ -t 类型 ] 存储设备 挂载点目录
mount -o loop ISO镜像文件 挂载点目录
复制代码

挂载规则

  • 一个挂载点同一时间只能挂载一个设备
  • 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
  • 一个设备可以同时挂载到多个挂载点
  • 通常挂载点一般是已存在空的目录

示例

[root@localhost data]# mount /dev/sdb1

[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  3.4G   47G    7% /
devtmpfs                 977M     0  977M    0% /dev
tmpfs                    993M     0  993M    0% /dev/shm
tmpfs                    993M  9.1M  984M    1% /run
tmpfs                    993M     0  993M    0% /sys/fs/cgroup
/dev/sda1                5.0G  161M  4.9G    4% /boot
tmpfs                    199M  4.0K  199M    1% /run/user/42
tmpfs                    199M   28K  199M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb5                2.0G   33M  2.0G    2% /opt
/dev/sdb1                5.0G   33M  5.0G    1% /mnt

复制代码

umount(解挂载)

umount 存储设备位置  
umount 挂载点目录
复制代码

示例

[root@localhost ~]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 52403200 3462308 48940892    7% /
devtmpfs                 1000032       0  1000032    0% /dev
tmpfs                    1015956       0  1015956    0% /dev/shm
tmpfs                    1015956    9312  1006644    1% /run
tmpfs                    1015956       0  1015956    0% /sys/fs/cgroup
/dev/sda1                5232640  164024  5068616    4% /boot
tmpfs                     203192       4   203188    1% /run/user/42
tmpfs                     203192      28   203164    1% /run/user/0
/dev/sr0                 4414592 4414592        0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1                5232640   32944  5199696    1% /mnt
/dev/sdb5                2086912   32944  2053968    2% /opt

[root@localhost ~]# umount /dev/sdb1

[root@localhost ~]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 52403200 3462364 48940836    7% /
devtmpfs                 1000032       0  1000032    0% /dev
tmpfs                    1015956       0  1015956    0% /dev/shm
tmpfs                    1015956    9284  1006672    1% /run
tmpfs                    1015956       0  1015956    0% /sys/fs/cgroup
/dev/sda1                5232640  164024  5068616    4% /boot
tmpfs                     203192       4   203188    1% /run/user/42
tmpfs                     203192      28   203164    1% /run/user/0
/dev/sr0                 4414592 4414592        0  100% /mnt
/dev/sdb5                2086912   32944  2053968    2% /opt
复制代码

永久挂载

将文件写入 /etc/fstab

UUID 可以确保唯一

[root@localhost ~]# blkid
/dev/sda1: UUID="90a6897e-d514-4ecc-8abd-637666102244" TYPE="xfs" 
/dev/sda2: UUID="JiWR9a-GOyJ-T2da-3ECl-zR5S-cBNw-tfVwHq" TYPE="LVM2_member" 
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sdb1: UUID="ff5693ec-be3c-43a9-921d-5b35df72c5fa" TYPE="xfs" 
/dev/sdb5: UUID="bf02cd4e-a35d-4284-8e46-b70ffb5f3ced" TYPE="xfs" 
/dev/mapper/centos-root: UUID="e7a14395-412e-4fdf-9bbe-1e58ab4b2e3b" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="d9573ac3-d0ad-469b-81ad-2c98fe57196d" TYPE="swap" 

[root@localhost ~]# vim /etc/fstab
##在最后加入如下代码

UUID=ff5693ec-be3c-43a9-921d-5b35df72c5fa    /mnt          xfs       defaults        0             0

[root@localhost ~]# mount -a

[root@localhost ~]# df   //查看是否成功
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 52403200 3462364 48940836    7% /
devtmpfs                 1000032       0  1000032    0% /dev
tmpfs                    1015956       0  1015956    0% /dev/shm
tmpfs                    1015956    9284  1006672    1% /run
tmpfs                    1015956       0  1015956    0% /sys/fs/cgroup
/dev/sda1                5232640  164024  5068616    4% /boot
tmpfs                     203192       4   203188    1% /run/user/42
tmpfs                     203192      28   203164    1% /run/user/0
/dev/sr0                 4414592 4414592        0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1                5232640   32944  5199696    1% /mnt
/dev/sdb5                2086912   32944  2053968    2% /opt