硬盘物理结构
盘片:硬盘有多个盘片,每盘片有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
- 446bytes: boot loader 启动相关
- 64bytes:分区表,其中每16bytes标识一个分区
- 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