目录
一.磁盘结构
1.1.磁盘物理结构
盘片:硬盘有多个盘头,每盘片2面
磁头:每面一个磁头
1.2.磁盘数据结构
扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据
磁道:同一盘片不同半径的同心圆
柱面:不同盘片相同半径构成的圆柱面
1.3.硬盘存储容量
-
硬盘存储容量=磁头数(8个2进制)×磁道(柱面)数×每道扇区数(6个二进制)×每扇区字节数
1柱面=512 * 扇区数/磁头数×磁道=51263255=7.84M
-
可以用柱面/磁头/扇区来唯一定位磁盘上每一个区域
二.MBR与磁盘分区
windows 当中是可以不分区的
linux 当中一定要分区 才可以使用硬盘
2.1.分区的优缺点
分区的优点:
优化I/O性能 读写
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个OS
采用不同文件系统
分区的缺点:
1.必须是连续空间
2.一旦分好区后,无法增加减少空间,空间就固定
3.一旦分好区后,inode号就会固定
2.2.MBR分区
MBR容量
MBR: 主引导记录, 是硬盘上的第一个扇区, 想要读数据得从这个扇区开始
MBR 一共 512 字节
前 446 字节 开机引导程序, 引导硬件 找到我们的操作系统
66 /16 =4 ............ 2
后 64 字节 分区表 表明了 分区的范围, 分区从哪里到那里结束
最后 两字节 代表MBR 结束位
MBR与GPT区别
MBR分区(老技术)、GPT分区(新技术)
MBR:只支持2T以下的硬盘,分区只可以分4个分区,一个分区表要占 16字节,3个主分区,一个扩展分区 fdisk(程序软件、工具)
GPT:可以支持2T以上的硬盘,可以分128个分区 gdisk(程序软件、工具)
分区的分类:
主分区: 可以直接使用 , 安装操作系统 存储文件 等
扩展分区:不可以直接使用, 需要再 划分逻辑分区, 让分区超过4个
逻辑分区:可以直接使用, 存储文件
扩展分区是特殊的主分区
主分区的序号为 1-4
逻辑分区的序号 从5 开始
2.3.GPT分区
GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z ( 4096Byte/block)
使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动
三.文件系统
文件系统的组成
内核中的模块:ext4, xfs, vfat
Linux的虚拟文件系统:VFS
用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
文件系统:用来管理(增删改查恢复)文件的程序
3.1.XFS、ext4
根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
用优化算法,日志记录对整体文件操作影响非常小
是一个全64-bit的文件系统,最大可以支持8EB的文件系统,1EB=1024PB1PB=1024TB(这里才到TB1TB=1024GB
而支持单个文件则达到8EB能以接近裸设备I/O的性能存储
Centos 7系统中的默认使用的文件系统是xfs
Centos 6系统中的默认使用的文件系统是ext4
3.2.swap
当内存不足时,将硬盘空间转化成内存使用
3.3.FAT16、FAT32
且最大只能支持32GB分区,单个文件也只能支持最大4GB。
3.4.NTFS(xfs)
NTFS文件系统所具备3个功能:错误预警功能、磁盘自我修复功能和日志功能,单个文件64GB
3.5.EXT4
Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分 区是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件 (16TB)、最大1EB的文件系统,以及速度的提升1EB=1024PB=1024*1024TB
3.6 JFS
主要是为满足服务器的高吞吐量和可靠性需求而设计、开发的。单个文件最大限制16TB,该文件系统最大支持1PB的容量。1PB=1024TB
四.分区工具
4.1.fdisk
格式:fdisk -l [磁盘设备]
fdisk [磁盘设备]
m 打印出菜单
p 打印出当前分区表
n 新建一个分区
d 删除一个分区
t 改变分区的属性,系统ID
w 保存
q 不保存退出
命令fdisk -l
命令 fdisk 是一个创建和维护分区表的程序,它兼容 DOS 类型的分区表、BSD 或者 SUN 类型的磁盘列表。
-l
:列出所有分区表:
4.2.blkid
可以查看块设备属性信息
4.3.mkfs
创建文件系统(格式化)常用选项
-t {ext2|ext3|ext4|xfs} 指定文件系统类型
-b {1024|2048|4096} 指定块 block 大小
-L ‘LABEL’ 设置卷标
-j 相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3-i
-i # 为数据空间中每多少个字节创建一个inode;不应该小于block大小
-N # 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128---4096
-m # 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] 启用指定特性-O ^FEATURE 关闭指定
mkfs -t {ext2|ext3|ext4|xfs} 指定文件系统类型
mkfs -t ext4=mkfs.ext4
mkfs -t xfs=mkfs.xfs
#文件系统检测和修复
fsck.FS_TYPE
fsck -t FS_TYPE-a 自动修复
-r 交互式修复错误e2fsck:ext系列文件专用的检测修复工具
xfs_repair:xfs文件系统专用检测修复工具
4.4.mkswap
swap
特殊的文件系统,缓解内存不足,为了个别应为程序加内存有点浪费
添加交换分区的空间
mkswap + 分区
swapon +分区 开启 -a 全部
swapoff +分区 关闭 -a 全部
swapoff -a 全部关掉
swapon -a 全部开启
4.5.lsblk
[root@localhost ~]#lsblk -d -o name,rota
#查看当前硬盘是什么模式 固态 机械 1 机械 0 固态
NAME ROTA
sda 1
sr0 1
4.6.df
命令
df
(disk filesystem的简写)用于查看已挂载磁盘的总容量、使用容量、剩余容量等。示例命令如下:
-h
:表示使用合适的单位显示,例如GB。-T
:表示显示文件系统类型
4.7.lsblk
lsblk命令:是“List block device”的缩写,即列为出所有存储设备。
4.8.du
命令du(disk useage)用来查看某个目录或文件所占空间的大小,其格式为 du [-abckmsh] [文件或者目录名]。该命令常用的参数有如下几个。
-a:表示全部文件和目录的大小都列出来。如果后面不加任何选项和参数,则只会列出目录(包含子目录)的大小。如果du命令不指定单位的话,默认显示单位为“KB”。示例命令如下:
-b:表示列出的值以B为单位输出。
-k:表示以KB为单位输出,这和默认不加任何选项的输出值是一样的。
-m:表示以MB为单位输出。
-h:表示系统自动调节单位。例如,如果文件太小,可能就几千字节,就以KB为单位显示;如果文件大到千兆字节,就以GB为单位显示。
-s:表示只列出总和。这个选项小编用得最多,示例命令如下:
五.挂载与解挂载
5.1.mount
mount [ -t 类型 ] 存储设备 挂载点目录
mount -o loop ISO镜像文件 挂载点目录
-a 自动挂载所有支持自动挂载的设备
-o options:(挂载文件系统的选项)df -h 查看是否为挂载点
[root@192 ~]# mount /dev/sr0 /opt
mount: /dev/sr0 写保护,将以只读方式挂载
# findmnt 查看 设备的详细信息
[root@localhost opt]# findmnt /sdb1
TARGET SOURCE FSTYPE OPTIONS
/sdb1 /dev/sdb1 xfs rw,relatime,seclabel,attr2,inode64,noquota
选项 | 功能 |
---|---|
rw/ro | 是否对挂载的文件系统拥有读写权限,rw 为默认值,表示拥有读写权限;ro 表示只读权限。 |
async/sync | 此文件系统是否使用同步写入(sync)或异步(async)的内存机制,默认为异步 async。 |
dev/nodev | 是否允许从该文件系统的 block 文件中提取数据,为了保证数据安装,默认是 nodev。 |
auto/noauto | 是否允许此文件系统被以 mount -a 的方式进行自动挂载,默认是 auto。 |
suid/nosuid | 设定文件系统是否拥有 SetUID 和 SetGID 权限,默认是拥有。 |
exec/noexec | 设定在文件系统中是否允许执行可执行文件,默认是允许。 |
user/nouser | 设定此文件系统是否允许让普通用户使用 mount 执行实现挂载,默认是不允许(nouser),仅有 root 可以。 |
defaults | 定义默认值,相当于 rw、suid、dev、exec、auto、nouser、async 这 7 个选项。 |
remount | 重新挂载已挂载的文件系统,一般用于指定修改特殊权限。 |
挂载规则:
一个挂载点同一时间只能挂载一个设备
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
一个设备可以同时挂载到多个挂载点
通常挂载点一般是已存在空的目录
#重新挂载
[root@localhost data]#mount -o ro /dev/sdc1 /mnt/
[root@localhost data]#mount
/dev/sdc1 on /mnt type xfs (ro,relatime,seclabel,attr2,inode64,noquota)
#如果有人在使用 挂载文件夹 无法先解挂载再 去挂载
[root@localhost data]#mount -o remount,ro /mnt/
[root@localhost data]#fuser -v /mnt/
用户 进程号 权限 命令
/mnt: root kernel mount /mnt
root 20480 ..c.. bash
[root@localhost data]#fuser -km /mnt/
/mnt: 20480c
5.2.永久挂载
需要 将文件写入 /etc/fstab
UUID 可以确保唯一
blkid 可以查看UUID
5.3.解挂载
umount 设备名|挂载点
卸载时:可使用设备,也可以使用挂载点
fuser -v MOUNT_POINT
查看正在访问指定文件系统的进程
fuser -km MOUNT_POINT
终止所有在正访问指定的文件系统的进程
六.磁盘分区实操
6.1.实操磁盘命令
①/sys/class/scsi_host/host0/scan;/sys/class/scsi_host/host1/scan;/sys/class/scsi_host/host2/scan 用于添加硬件后刷新槽位让服务器识别到新添加的硬盘。
②lsblk 用于查看分区情况
③df -h 人性化显示挂载情况④mkfs.xfs +分区,用于格式化分区
⑤partprobe 用于分区完成后分区不显示刷新分区情况
⑥fdisk +硬盘 用于硬盘分区2TB以下磁盘划分
⑦blkid 查看设备的uuid号
⑧gdish +硬盘 用于硬盘分区2TB以上磁盘划分
6.2.添加磁盘(硬件)
1.在虚拟机的设置中点击添加,一直点下一步直到完成,点击确定再关闭页面。如下图是添加成功的页面。
2.添加完成后进入虚拟机执行命令使服务器识别新加的硬盘
echo "- - -" >/sys/class/scsi_host/host0/scan;
echo "- - -" >/sys/class/scsi_host/host1/scan;
echo "- - -" >/sys/class/scsi_host/host0/scan;
6.3.磁盘分区
1.fdisk /dev/sdb 对sdb磁盘进行分区进入人机交互界面,如下图。
2.输入n表示添加分区,选择分区类型,p为主分区,e为扩展分区,l为逻辑分区
6.4.格式化分区
1.划分分区完成后首先使用lsblk命令查看分区是否同步到系统中,如果没显示划分的分区则使用partprobe命令刷新分区表,然后再使用lsblk查看是否显示划分的分区,如下图是直接显示扩展分区sdb2和逻辑sdb5的。
2.分区显示出来以后对分区进行格式化,使用mkfs.xfs +分区名,如下图
6.5.挂载分区及使用
格式化分区完成后就可以进行挂载使用了,注意挂载的目录最好是一个空目录,如果不是空目录会将原目录里的内容隐藏,可能会导致数据丢失,同一挂载点不要挂载多个磁盘。挂载命令 mount +挂载分区 +挂载点(空目录),挂载完成后使用df -h 查看挂载情况,如下图。
6.6.永久挂载
1.以上挂载是临时挂载,若重启服务器则挂载失效,所以需要永久挂载即使服务器重启后挂载依然生效。首先使用命令blkid查看磁盘的uuid,然后进入/etc/fstab将挂载信息写入其中。不建议写分区名,一定要写uuid,只有uuid是唯一的。
①使用blkid查看磁盘的UUID号。
②输入vim /etc/fstab进入配置文件,将uuid号(挂载信息)写入其中,放入其中永久挂载。
③配置文件修改完成后需要使用mount -a 检查一下配置文件是否有问题,若有问题则会进行提示,无问题则不提示。有问题会进行提示,若提示有问题一定要进行修改,否则会影响系统下次开机,会出control d 错误。
④df -h 看一下挂载情况