硬盘的结构
- 盘片:硬盘有多个盘片,每盘片有2面(正反两面)
- 磁头:每面一个磁头,并不是只有一个磁头,磁头也 不会碰到盘面,磁头等于盘片数量
- 扇区:盘片被分为多个扇形区域,每个扇区存放512 字节的数据(扇区越多容量越大)
- 磁道:同一盘片不同半径的同心圆
- 柱面:不同盘片相同半径构成的圆(柱面和磁道数量 相同)
硬盘存储容量
- 硬盘存储容量=磁头数(8个2进制)×磁道(柱面) 数×每道扇区数(6个二进制)×每扇区字节数
- 1柱面=512 * 扇区数/磁头数×磁道=51263255=7.84M
- 可以用柱面/磁头/扇区来唯一定位磁盘上每一个区域
MBR与磁盘分区
分区的作用
- 优化I/O性能
- 实现磁盘空间配额限制
- 提高修复速度
- 隔离系统和程序
- 安装多个OS
- 采用不同文件系统
主引导记录
- MBR位于硬盘第一个物理区处
- MBR中包含硬盘的主引导程序和硬盘分区表
- 分区表有4个分区记录区,每个分区记录区占16个字节
Linux中将硬盘、分区等设备均表示为文件
- /dev/:硬件设备文件所在的目录
- hd:表示IDE设备(sd表示scsi设备)
- a:硬盘的顺序号,表示的第几块硬盘,以a、b、c…表示
- 5:分区的顺序号,表示第一块硬盘接口的第五个分区
磁盘分区结构
- 硬盘中的主分区数目只有4个
- 主分区和扩展分区的序号限制在1~4
- 扩展分区再分为逻辑分区
- 逻辑分区的序号将始终从5开始
(扩展分区一定是主分区,主分区不一定是扩展分区)
文件系统的组成
- 内核中的模块:ext4, xfs, vfat
- Linux的虚拟文件系统:VFS
- 用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
分区工具
fdisk
格式
fdisk -l [磁盘设备] //非交互式查看磁盘分区
fdisk [磁盘设备] //交互式查看和管理磁盘分区
交互式查看和管理磁盘分区
常用指令
指令 | 作用 |
---|---|
m | 打印出菜单 |
p | 打印出当前分区表 |
n | 新建一个分区 |
d | 删除一个分区 |
t | 改变分区的属性,系统ID |
w | 保存 |
q | 不保存退出 |
示例
[root@localhost ~]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):p //p指令打印出当前分区表
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0009766d
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 125829119 61864960 8e Linux LVM
blkid
可以查看块设备属性信息
示例
[root@localhost ~]# blkid
/dev/sda1: UUID="1003453c-ed08-492a-bac5-76fd0e006c5d" TYPE="xfs"
/dev/sda2: UUID="4zS7ZS-vwuG-OXJz-rvsT-zmn9-pszq-u5Wqd7" TYPE="LVM2_member"
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="dbfa8769-3674-4dca-9ea2-ce4d5d08a176" TYPE="xfs"
/dev/mapper/centos-swap: UUID="cc343a9d-2526-43ec-ae59-a927a4c8e9ec" TYPE="swap"
/dev/mapper/centos-home: UUID="fe129d06-2d94-456a-b126-728f0c61d9db" TYPE="xfs"
mkfs
创建文件系统(格式化)常用选项
选项
- -t {ext2|ext3|ext4|xfs} 指定文件系统类型
- -b {1024|2048|4096} 指定块 block 大小
- -L ‘LABEL’ 设置卷标
- -j ext3,相当于 -t 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 关闭指定
示例
[root@localhost ~]# ls /sbin/mkfs* //查看当前系统支持哪些文件系统类型
/sbin/mkfs /sbin/mkfs.ext2 /sbin/mkfs.fat /sbin/mkfs.vfat
/sbin/mkfs.btrfs /sbin/mkfs.ext3 /sbin/mkfs.minix /sbin/mkfs.xfs
/sbin/mkfs.cramfs /sbin/mkfs.ext4 /sbin/mkfs.msdos
[root@localhost ~]# mkfs.xfs /dev/sdb1 //将sdb1格式化为XFS文件系统
meta-data=/dev/sdb3 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
#文件系统检测和修复
fsck.FS_TYPE
fsck -t FS_TYPE
-a 自动修复
-r 交互式修复错误
mkswap
swap
特殊的文件系统,缓解内存不足,为了个别应为程序加 内存有点浪费
添加交换分区的空间
- mkswap + 分区
- swapon +分区 开启 -a 全部
- swapoff +分区 关闭 -a 全部
lsblk
[root@localhost ~]# lsblk -d -o name,rota
#查看当前硬盘是什么模式 固态 机械 1 机械 0 固态
NAME ROTA
sda 1
sr0 1
挂载与解挂载
mount
格式
mount [ -t 类型 ] 存储设备 挂载点目录 mount -o loop ISO镜像文件 挂载点目录
示例
[root@localhost data]# mount /dev/sdb1 /data/aa //将sdb1挂载到aa目录下
[root@localhost ~]# df -h //查看磁盘情况,已成功挂载
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 10G 4.9G 5.2G 49% /
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 40K 183M 1% /run/user/1005
/dev/sr0 4.3G 4.3G 0 100% /run/media/Amy/CentOS 7 x86_64
/dev/sdb1 10G 33M 10G 1% /data/aa
挂载
- 一个挂载点同一时间只能挂载一个设备
- 一个挂载点同一时间挂载了多个设备,只能看到最后
- 一个设备的数据,其它设备上的数据将被隐藏
- 一个设备可以同时挂载到多个挂载点
- 通常挂载点一般是已存在空的目录
umount
格式
umount 存储设备位置
umount 挂载点目录
示例
[root@localhost data]# umount /dev/sdb1 //将sdb1解除挂载
[root@localhost data]# df -h //查看磁盘情况,已成功解挂载
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 10G 4.9G 5.2G 49% /
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 40K 183M 1% /run/user/1005
磁盘分区完整步骤
第一步:检测并确认新硬盘
新加硬盘后,需要刷新磁盘接口,让系统识别新硬盘。命令如下:
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host1/scan
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host2/scan
[root@localhost ~]# lsblk //查看块设备,已识别到新硬盘sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 14G 0 part
├─centos-root 253:0 0 10G 0 lvm /
└─centos-swap 253:1 0 4G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom
第二步:设置硬盘分区
[root@localhost ~]# fdisk /dev/sdb
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-125829119,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-125829119,默认为 125829119):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
sdb 8:16 0 60G 0 disk
├─sdb1 8:17 0 10G 0 part
第三步:为分区指定文件系统(格式化)
将/dev/sdb1 格式化为XFS文件系统——mkfs.xfs命令
[root@localhost ~]# mkfs.xfs /dev/sdb1
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=
将/dev/sdb2 格式化为交换文件系统——mkswap命令
[root@localhost ~]# mkswap /dev/sdb2 //将sdb6格式化为swap文件系统
正在设置交换空间版本 1,大小 = 6289404 KiB
无标签,UUID=2b59e021-35a5-489a-9450-849917a9850a
[root@localhost ~]# swapon -s //显示所有启用的交换分区,目前只显示系统原有的交换分区
文件名 类型 大小 已用 权限
/dev/dm-1 partition 4194300 0 -1
[root@localhost ~]# swapon /dev/sdb2 //启用交换分区
[root@localhost ~]# swapon -s //此时查看,显示了刚刚启用的交换分区
文件名 类型 大小 已用 权限
/dev/dm-1 partition 4194300 0 -1
/dev/sdb2 partition 6289404 0 -2
[root@localhost ~]# swapoff /dev/sdb2 //不使用后可以停用交换分区
[root@localhost ~]# swapon -s //查看所有交换分区,/dev/sdb6已不显示
文件名 类型 大小 已用 权限
/dev/dm-1 partition 4194300 0 -1
第四步:挂载文件系统
新建/data目录,之后建子目录aa
方式一:使用mount命令一次性挂载
[root@localhost /]# mkdir /data //创建/data目录
[root@localhost /]# cd /data
[root@localhost data]# mkdir aa //在/data目录下创建子目录aa
[root@localhost data]# ls
aa
[root@localhost data]# mount /dev/sdb1 /data/aa //将sdb1挂载到aa目录下
[root@localhost ~]# df -Th //查看磁盘情况并显示文件系统类型,可看到已成功挂载
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 10G 4.9G 5.2G 49% /
devtmpfs devtmpfs 897M 0 897M 0% /dev
tmpfs tmpfs 912M 0 912M 0% /dev/shm
tmpfs tmpfs 912M 9.1M 903M 1% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 179M 836M 18% /boot
tmpfs tmpfs 183M 0 183M 0% /run/user/0
tmpfs tmpfs 183M 40K 183M 1% /run/user/1005
/dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/Amy/CentOS 7 x86_64
/dev/sdb1 xfs 10G 33M 10G 1% /data/aa
方式二:永久挂载
需要将文件写入 /etc/fstab
UUID 可以确保唯一
[root@localhost ~]# blkid //查看硬件设备的UUID
/dev/sda1: UUID="87263b93-1e10-49c6-a30c-2b80b6b17038" TYPE="xfs"
/dev/sda2: UUID="NOm6dB-M1Oe-2DBL-JyAF-p9by-VTLr-14MAfJ" TYPE="LVM2_member"
/dev/sdb1: UUID="e0b714cd-c33e-42b2-a051-1e1f3333b4b7" TYPE="xfs"
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="d0d8117f-e6af-46de-985e-910fafd9d4a2" TYPE="xfs"
/dev/mapper/centos-swap: UUID="8a01eff6-7570-42db-ba4d-a7ff11acbdb3" TYPE="swap"
[root@localhost ~]# vim /etc/fstab //修改配置文件
#将sdb1和sdb2加入配置文件
UUID=e0b714cd-c33e-42b2-a051-1e1f3333b4b7 /data/aa 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。一般不进行检查,会影响系统性能。