Linux磁盘管理
一、计算机硬盘概述
硬盘是计算机主要存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成,碟片外覆盖有铁磁性材料,硬盘内部由磁道、柱面、扇区、磁头等部件组成,如图所示:
二、磁盘的数据结构
-
扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据(扇区越多容量越大) 存放数据的最小单位 512字节。
-
磁道:同一盘片不同半径的同心圆
-
柱面:不同盘片相同半径构成的圆(柱面和磁道数量相同)
三、硬盘接口的类型
有SAS、SATA、SCSI、光纤通道
-
SCSI:640MB/s,并行接口,早期服务器
-
SATA:6Gbps,SATA数据端口与电源(长的电源,数据线短的)端口是分开的,即需要两条线,一条数据线,一条电源线
-
SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而SATA中不包含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不行。
四、磁盘分区的优缺点
分区的优点:
-
优化I/O性能 读写
-
实现磁盘空间配额限制
-
提高修复速度
-
隔离系统和程序
-
安装多个OS
-
采用不同文件系统
分区的缺点:
-
必须是连续的空间
-
一旦分好区域后无法增加减少空间,空间固定
五、MBR分区与GPT分区的区别
MBR:2t以下的硬盘 使用fdisk
GPT:可以支持2t及以上的硬盘 使用gdisk
MBR分区
MBR: 主引导记录, 是硬盘上的第一个扇区, 想要读数据得从这个扇区开始
MBR 一共 512 字节
前 446 字节 开机引导程序, 引导硬件 找到我们的操作系统 后 64 字节 分区表 表明了 分区的范围, 分区从哪里到那里结束
最后 两字节 代表MBR 结束位
MBR 分区只可以分4个分区, 一个分区表要占 16字节
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,使得操作系统可以启动。
分区分类:
-
主分区: 可以直接使用 , 安装操作系统 存储文件 等
-
扩展分区:不可以直接使用, 需要再 划分逻辑分区, 让分区超过4个
-
逻辑分区:可以直接使用, 存储文件
扩展分区是特殊的主分区
主分区的序号为 1-4
逻辑分区的序号 从5 开始
六、文件系统
文件系统的组成:
-
内核中的模块:ext4, xfs, vfat
-
Linux的虚拟文件系统:VFS
-
用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
xfs:centos 7默认的文件系统
ext4:centos 6默认的文件系统
swap:当内存不足时,将硬盘空间转换成内存
FAT16、FAT32:且最大只能支持32GB分区,单个文件也只能支持最大4GB。
注意:
文件系统的修复
-
fsck /dev/sdb1 -y :开源修复,不是很稳定
-
dd if=/dev/zero of=/dev/sdb1 bs=1M count=1 破坏文件系统,然后用上面的命令进行修复。
七、分区工具
分区工具介绍:
分完区,不保存不生效,有反悔的可能
-
fdisk 2t及以下分区
-
gdisk 全支持 (推荐)
分完区立马生效
- parted 全支持 (不推荐)
1.查看磁盘分区的信息:fdisk
fdisk命令格式:fdisk -l 设备名
设备名:
-
/dev/sdb 一整块的磁盘
-
/dev/sdb1 磁盘的分区
进入到分区命令中的选项:
-
m 打印出菜单
-
p 打印出当前分区表
-
n 新建一个分区
-
d 删除一个分区
-
t 改变分区的属性,系统ID
-
w 保存
-
q 不保存退出 具体实验在下文
八、磁盘命令
- lsblk:显示块设备
[root@localhost ~]# lsblk //显示块设备
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1.9G 0 part /boot
└─sda2 8:2 0 50.3G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 3.7G 0 lvm [SWAP]
sr0 11:0 1 4.2G 0 rom
- blkid:查看设备的唯一标识符
[root@localhost ~]# blkid //查看设备的唯一标识符
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sda1: UUID="d3f3c980-d425-48d5-9ee9-bb1304a5ae0c" TYPE="xfs"
/dev/sda2: UUID="b4RQUc-fGJA-KkLH-dVeF-Q26o-zcUT-pnQVky" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="d1ed59da-4b2d-41b0-8064-7afc434f0488" TYPE="xfs"
/dev/mapper/centos-swap: UUID="1ce7364c-75c0-4114-8140-101019cec86f" TYPE="swap"
- df:查看挂载、磁盘剩余量
[root@localhost ~]# df //查看挂载、磁盘剩余量
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 48804576 4525156 44279420 10% /
devtmpfs 917596 0 917596 0% /dev
tmpfs 933524 0 933524 0% /dev/shm
tmpfs 933524 9212 924312 1% /run
tmpfs 933524 0 933524 0% /sys/fs/cgroup
/dev/sda1 1942528 182412 1760116 10% /boot
tmpfs 186708 12 186696 1% /run/user/42
tmpfs 186708 0 186708 0% /run/user/0
- partprobe:分完区后,系统未识别可以用来刷新分区表
磁盘分区示例:
1.创建普通分区
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 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-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xd65e9f32
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
2.创建扩展分区
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e
分区号 (2-4,默认 2):
起始 扇区 (10487808-41943039,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-41943039,默认为 41943039):+10G
分区 2 已设置为 Extended 类型,大小设为 10 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xd65e9f32
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
/dev/sdb2 10487808 31459327 10485760 5 Extended
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
3.创建逻辑分区
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (10489856-31459327,默认为 10489856):
将使用默认值 10489856
Last 扇区, +扇区 or +size{K,M,G} (10489856-31459327,默认为 31459327):+2G
分区 5 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xd65e9f32
设备 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
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
4.显示块设备
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1.9G 0 part /boot
└─sda2 8:2 0 50.3G 0 part
├─centos-root 253:0 0 46.6G 0 lvm /
└─centos-swap 253:1 0 3.7G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part //普通分区
├─sdb2 8:18 0 1K 0 part //扩展分区
└─sdb5 8:21 0 2G 0 part //逻辑分区
sr0 11:0 1 4.2G 0 rom
九、格式化:mkfs
格式化命令格式:
-
mkfs -t 指定分区类型 分区
-
mkfs.分区类型 分区
补充:
创建交换文件系统:mkswap命令
mkswap命令格式:
-
创建交换文件系统,分区设备位置要使用绝对路径:mkswap 分区设备
-
启用交换分区:swapon 分区设备
-
停用交换分区:swapoff 分区设备
-
显示所有启用状态的交换分区:swapon -s
格式化示例:
1.格式化普通分区
[root@localhost ~]# mkfs -t //格式化前先筛选文件系统
btrfs cramfs ext2 ext3 ext4 fat minix msdos vfat xfs
[root@localhost ~]# mkfs -t 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
2.格式化逻辑分区
[root@localhost ~]# mkfs.xfs /dev/sdb5 //格式化逻辑分区
meta-data=/dev/sdb5 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524288, 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 存储设备 挂载点目录
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据
挂载示例:
[root@localhost ~]# mount /dev/sdb1 /mnt //把普通分区挂载到mnt目录
[root@localhost ~]# df //查看挂载,磁盘剩余量
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 48804576 4525476 44279100 10% /
devtmpfs 917596 0 917596 0% /dev
tmpfs 933524 0 933524 0% /dev/shm
tmpfs 933524 9224 924300 1% /run
tmpfs 933524 0 933524 0% /sys/fs/cgroup
/dev/sda1 1942528 182412 1760116 10% /boot
tmpfs 186708 12 186696 1% /run/user/42
tmpfs 186708 0 186708 0% /run/user/0
/dev/sdb1 5232640 32944 5199696 1% /mnt
补充:
卸载文件系统:umount命令
umount命令格式:
-
umount 存储设备位置
-
umount 挂载点目录
十、永久挂载
使用mount命令手动挂载文件设备后,必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。
在/etc/fstab 文件中,每一行记录对应一个分区或设备的挂载配置信息,从左到右包括六个字段(使用空格或者制表符分隔)。以 “/dev/mapper/centos-root / 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 文件,设置/dev/sdb1 每次开机后自动挂载到/mnt 目录下
1.查看设备的唯一标识符UUID
2.编辑/etc/fstab 文件,更改配置
注意:
修改/etc/fstab 文件时,每一个字段都必须填写正确,如果有错误,下次开机时会有“Control-D"报错,导致无法正常启动。