一、认识磁盘
硬盘的物理结构
1、什么是磁盘
磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。
- 机械硬盘:靠磁头转动磁盘来存储写入数据,价格相对低廉读写能力慢。
- 固态硬盘:依靠芯片来存储数据,价格贵但写入读取速度快。
硬盘分为机械硬盘和固态硬盘,由于市场上固态硬盘和机械硬盘性价对比,现在主流还是机械硬盘为主,因为低廉的价格和大容量的空间深受市场的青睐。
盘片:硬盘有多个盘片,每盘片2面(正反两面)。
磁头:每面一个磁头。(并不是只有一个磁头)
机械硬盘
2、硬盘的数据结构
- 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据,硬盘的最小存储单位
- 磁道: 同一盘片不同半径的同心圆, 是由磁头在盘片表面划出的圆形轨迹,方便数据存储
- 柱面: 不同盘片相同半径构成的圆柱面,由同一半径圆的多个磁道组成
3、硬盘接口类型
磁盘的接口类型决定了数据的传输快慢,常用磁盘接口有SCSI、SATA、SAS。
- SCSI(并口):接口速度640MB/s,并行接口,早期服务器。小型机系统接口,SCSI硬盘广为工作站级个人电脑以及服务器所使用,资料传输时 CPU占用率较低,转速快,支持热插拔等。
- SATA(串口): 接口速度6Gpb/s,并行接口,早期服务器。抗干扰性强,支持热插拔等功能,速度快,纠错能力强。
- SAS:是新一代的SCSI技术, 和SATA硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到6Gb/s。SAS是以整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而SATA不包含供电线。SATA标准实际是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不行。
4、机械硬盘与固态硬盘
机械硬盘(HDD) :
Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。 磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。信息通过离磁性表面很近的磁头,由电磁流来改变极性方式被电磁流写到磁盘上,信息可以通过相反的方式读取。硬盘作为精密设备,尘埃是其大敌,所以进入硬盘的空气必须过滤。
固态硬盘(SSD) :
Solid State Disk或Solid State Drive,又称固态驱动器,是用固态电子存储芯片阵列制成的硬盘。固态硬盘,因为台湾的英语里把固体电容称为Solid而得名。SSD由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。 固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上基本与普通硬盘一致。
磁盘分区
# MBR与磁盘分区结构
- MBT:只支持2T及以下,适配性强并且只支持4个分区。
- GPT:可以支持2T以上,适配性相对来说比MBT弱可分为128个分区。
主引导记录(MBR:Master Boot Record)
- MBR位于硬盘第一个物理扇区处 ,想要读取数据都要从第一分区MBR表开始, MBR中包含硬盘的主引导程序和硬盘分区表,其中主引导程序会通过分区表协助硬件找到操作系统。
- 第一个扇区总共512字节,前446字节是主引导记录,分区表保存在扇区中的第447-512字节中(64字节)最后还有2字节结束位。
- 分区表有4个分区记录区,每个分区记录区占16字节
磁盘分区的表示
/dev/hda5
- /dev/:硬件设备文件所在的目录
- hd:表示IDE设备(sd表示scsi设备)
- a:硬盘的顺序号,表示的第几块硬盘,以a、b、c…表示
- 5:分区的顺序号,表示第一块硬盘接口的第五个分区
磁盘分区类型
- 硬盘中的主分区数目只有4个(总512-446/16=4)
- 主分区: 可以直接使用,可以随意使用。 id范围是1-4.
- 扩展分区:扩展分区是特殊的主分区,不可以直接使用, 需要再划分逻辑分区,解决分区只有4个的问题。id范围为1-4.
- 逻辑分区:可以直接使用,逻辑分区的空间必须是扩展分区中得到的,id范围从5开始。
文件系统类型
文件系统:
安装在磁盘上的文件系统(软件),负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取、安全控制、日志、压缩加密等。是用来管理(增删改查恢复)文件的程序。
1.XFS文件系统
- CenOS 7系统中默认使用的文件系统,高性能的日志型文件系统
- 存放文件和目录数据的分区
- 根据备份可迅速恢复磁盘文件内容
- 可扩展性 :是一个全64-bit的文件系统,最大可以支持8EB的文件系统
Swap交换文件系统 (虚拟内存)
当内存不足时,将硬盘的空间转化为内存使用
FAT16、FAT32
性能弱最大只能支持32GB分区,单个文件也只能支持最大4GB,不支持。
NTFS
NTFS文件系统所具备3个功能:错误预警功能、磁盘自我修复功能和日志功能。
EXT4
CenOS 6系统中默认使用的文件系统支持创建使用单个巨型文件1EB的文件系统
JFS
主要是为满足服务器的高吞吐量和可靠性需求而设计、开发的。单个文件最大限制16TB,该文件系统最大支持1PB的容量。但是要收费所以不在我们菜单里。
分区工具
分区工具介绍:
分完区,不保存不生效,有反悔的可能
- fdisk 2T及以下分区。(一般来说使用这个)
- gdisk 全支持,2T以上再考虑使用。 (推荐)
分完区立马生效
- parted 全支持 ,即时生效,分完立马生效,没有反悔可能。(不推荐)
磁盘命令
| 命令 | 说明 |
|---|---|
| lsblk | 显示块设备(磁盘)显示比较详细 |
| partprobe | 分完区后,系统未识别可以用来刷新分区表 |
| blkid | 查看设备的唯一标识符 |
| fdisk | 分区,查看分区情况 |
| gdisk | 分区 |
| mount | 挂载,显示所有挂载情况 |
| df | ( disk free )查看挂载情况,磁盘剩余量 |
| df -Th | 查看分区类型,人性化显示单位大小 |
查看磁盘分区的信息:分区工具fdisk
fdisk命令格式:fdisk [选项]
| 选项 | 功能说明 |
|---|---|
| fdisk -l | 查看磁盘信息 |
| fdisk -l /dev/sdb | 查看sdb磁盘的 |
| fdisk 设备名(必须是一整块的磁盘) | 对设备进行分区 |
演示:非交互式查看磁盘及其分区
[root@localhost ~]# fdisk -l
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00099b5e
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 31475711 14688256 8e Linux LVM
设备名:
- /dev/sdb 一整块的磁盘
- /dev/sdb1 磁盘的分区
交互式查看和管理磁盘分区
进入到分区命令中的选项:
- m 打印出菜单
- p 打印出当前分区表
- n 新建一个分区
- d 删除一个分区
- t 改变分区的属性,系统ID
- w 保存
- q 不保存退出 具体实验在下文
演示:
用lsblk命令来查看本机的磁盘和分区情况
刷新硬件接口
使用命令fdisk /dev/adb来对磁盘进行分区
最后要加上w进行保存退出。
创建一个扩展分区
此次可发现一个1k的扩展分区
最后可得出一个逻辑分区
如果系统没有分辨出来可以用partprobe来进行刷新本机磁盘和分区情况。
创建文件系统(格式化)
创建文件系统——mkfx
Make Filesystem,创建文件系统(格式化)。
命令格式:
mkfs -t 文件系统类型 分区设备
mkfs.文件系统类型 分区设备 //两种命令格式中,分区设备位置都要用绝对路径
演示:
格式化磁盘分区,将sdb1分区格式化为xfs文件系统。
[root@localhost /]# mkfs -t //这里是系统类型,而默认为xfs
btrfs ext2 ext4 minix vfat
cramfs ext3 fat msdos xfs
[root@localhost /]# mkfs -t xfs /dev/sdb1 //将sdb1格式化为xfs系统
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data(数据) = (块大小)bsize=4096 blocks=2621440, 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
也可这样写
[root@localhost /]# mkfs.xfs /dev/sdb5
meta-data=/dev/sdb5 isize=512 agcount=4, agsize=458752 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1835008, 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
挂载和卸载文件系统
挂载
挂载规则:
- 不能挂文件,只能挂文件夹
- 通常挂载点是已存在的空的目录(挂载目录需提前设置好,不能挂载不存在的目录。 最好挂载空目录,不然挂载点下原有文件可能丢失。)
- 一个挂载点同一时间可以挂载多个设备,但只能看到最后一个设备的数据,其它设备上的数据将被隐藏
- 一个设备可以挂载多个挂载点,但设备还是那个设备,并没有增加或减少,唯独增加的只是挂载点。
- 挂载点目录不可被其他进程使用到
手动挂载文件系统————mount
-
mount命令不仅可以挂载外接设备,还可以显示当前系统中挂载情况。
-
外来的设备包括(移动硬盘 光驱 u盘 新加硬盘)如果想在Linux中使用,一定要挂载在Linux内部找一个空文件夹,系统和设备做上关联。
-
使用mount命令挂载是一次性的, 关机后挂载关系就会取消,下次开机启动时仍然需要重新挂载。
-
需要使用硬盘里的空间就必须把硬盘挂载到系统里的一个空间里。
-
如果挂载一次没有成功的话可以再次尝试挂载。
mount挂载命令格式:mount [ 选项 ] 存储设备 挂载点目录
挂载目标通常是一个空的文件夹,当挂载成功该文件夹只代表了挂载的磁盘,相当于两者之间做了个关联。
mount /dev/sdb1 /opt //挂载sdb1到opt目录下
mount /dev/sdb5 /mnt //挂载sdb5到mnt目录下
mount [-t 文件系统类型] 存储设备 挂载点目录
mount -o loop ISO镜像文件 挂载点目录 //挂载ISO镜像到指定文件夹
演示:
[root@localhost /]# mount /dev/sdb1 /mnt //将sdb1临时挂载到mnt挂载点
[root@localhost /]# cd /mnt
[root@localhost mnt]# df -h //查看挂载后的内容
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 10G 5.0G 5.1G 50% /
devtmpfs 897M 0 897M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 9.1M 903M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 1014M 179M 836M 18% /boot
tmpfs 183M 0 183M 0% /run/user/0
tmpfs 183M 12K 183M 1% /run/user/42
/dev/sdb1 10G 33M 10G 1% /mnt
现在mnt作为sdb1的入口,现在代表了sdb1磁盘。
解挂载
命令格式 : umount 存储设备位置 挂载点目录
注意!!! 可能有几种问题会导致无法顺利解挂载:
解挂载时在挂载目录下会导致无法顺利解挂载。
[root@localhost /]# mount /dev/sdb1 /mnt //将sdb1挂载到mnt目录下
[root@localhost /]# cd /mnt //切换工作目录到mnt目录下
[root@localhost mnt]# umount /dev/sdb1 //解挂载
umount: /mnt:目标忙。 //无法完成解挂载
(有些情况下通过 lsof(8) 或 fuser(1) 可以
找到有关使用该设备的进程的有用信息)
这时候需要把工作目录切换出去就可以了
有人在使用挂载目录
[root@localhost /]# umount /dev/sdb1 //解挂载
umount: /mnt:目标忙。 //报错,无法完成
(有些情况下通过 lsof(8) 或 fuser(1) 可以
找到有关使用该设备的进程的有用信息)
[root@localhost /]# fuser -v /mnt/ //可以使用该命令来查看当前谁在用
用户 进程号 权限 命令
/mnt: root kernel mount /mnt
zhu 3453 ..c.. bash
[root@localhost /]# fuser -km /mnt/ //使用该命令剔除用户,慎用!!!
/mnt: 3453c
[root@localhost /]# umount /dev/sdb1
[root@localhost /]#mount -o rw,remount /dev/sdb1 /mnt //更改挂载文件权限可以达到重新挂载的效果
- fuser -v /mnt/ 可以看到谁在用
- fuser -km /mnt/ 把用户都剔除、
设置文件系统的自动挂载(永久挂载)
使用mount挂载只是临时性的挂载 ,重启一下挂载就没有了,如果想要得到永久性的挂载需要借助/etc/fstab这个文件,将挂载信息写入/etc/fstab文件下可以起到永久挂载的目的,但是该文件使用时要谨慎小心,该文件为开机启动项。但凡有一点点小差错都会造成无法正常开机。所以挂载信息写入/etc/fstab后一定要用 mount -a 测试一下,刷新fstab里有的挂载项,不报错即可。
首先可以使用blkid来查看设备的唯一标识符,例如拿/dev/sdb1来举例,此处的UUID号将在后面永久挂载上起到明确目标的作用
在/etc/fstab 文件中,每一行记录对应一个分区或设备的挂载配置信息,从左到右包括六个字段(使用空格或者制表符分隔)。以 “UUID=f7da955e-b563-4ac8-8d5c-5516ab5141b1 /mnt xfs defaults 0 0” 为例,各部分含义如下所述:
- 字段1:设备名或设备卷标名、或设备的UUID(建议使用UUID,可使用lsbik命令查看)。
- 字段2:文件系统的挂载点目录的位置。
- 字段3:文件系统类型,如 XFS、swap 等。
- 字段4:挂载参数,即 mount 命令”-o“选项后可使用的参数。例如,default、rw、ro、noexec 分别表示为默认参数、可读可写、只读、禁用执行程序。
- 字段5:表示文件系统是否需要 dump 备份(dump是一个备份工具)。一般设为1时表示需要,设为0时将被dump忽略。
- 字段6:该数字决定在系统启动时进行磁盘检查的顺序。0表示不进行检查, 1表示优先检查,2表示其次检查。根分区可设为1,其他分区设置为2。一般不进行检查,会影响系统性能。
最后的最后编辑好/etc/fstab退出来后需要输入mount -a验证一下有没有出差错,如果不幸在开机时出现错误需要输入ctrl+D后再输入密码,进行对/etc/fstad的修复。
Linux硬盘使用全流程
在虚拟机中添加硬盘
重启系统,刷新磁盘分区
分区
格式化
挂载
永久挂载
blkid查看设备唯一标识符然后进入永久挂载。