CentOS磁盘管理
2019-05-23 / Server / 1204 次围观 / 0 次吐槽 /这则笔记主要整理linux磁盘管理的基础知识。
磁盘分区挂载的工作流:
磁盘分区 (fdisk、parted)
磁盘格式化 (mkfs.ext2、mkfs.ext3、mkfs.ext4和mkfs.xfs )
挂载分区 (mount)
修改
/etc/fstab
除此之外,还会整理磁盘分区动态管理LVM,以及手动增加swap分区的相关知识。
查看磁盘
df
命令 查看已挂载磁盘的容量
命令行格式: df [参数]
如上图所示,一共有6列:
列数 | 含义 |
---|---|
1 | 分区名字 |
2 | 分区总容量 |
3 | 使用容量 |
4 | 剩余容量 |
5 | 已使用容量所占百分比 |
6 | 分区挂载点 |
df
常见参数用法
常用的参数有i
、 h
、 k
、 m
,参数可省略。具体如下:
-i
查看inodes 使用情况,如果inodes已使用100%,即使磁盘空间仍有空余,也会提示磁盘空间已满。
-h
使用合适的存储单位显示。
-k、-m
指定存储单位显示,k 表示KB;m表示MB。
free 命令 查看swap 分区情况
du 命令 查看某个目录或者文件的大小
命令行格式 du [参数] [dirname/filename]
不加任何参数,只会目录(包括子目录)的大小:
常用参数用法如下:
-a
列出全部文件及目录的大小
-b、 -k、 -m
指定不同的存储单位,b
表示bytes
字节;k
代表KB
;m
代表MB
。
注:使用 -k 时,如果文件小于4KB,会显示4KB(inodes记录文件存储的最小的单位是块,通常是4KB大小。)
-h
自适应恰当的输出单位
-c
表示最后加总和
-s
表示只列出总和
参数可以连用,例如
du -sh [dirname/filename]
利用管道符,对结果进行排序
du -h [dir_name] | sort -n
磁盘分区
前提准备:添加虚拟分区
点击虚拟机设置,选择磁盘,调整大小。
利用fdisk 进行磁盘分区
fdisk
是linux 下的磁盘分区工具,分区格式为MBR,特点是最多分4个主分区,磁盘大小不能超过2T。因此使用fdisk需要遵循以下原则:
主分区(包括拓展分区)控制在4个以内,不得超过4个;
主分区在前,拓展分区在后;
拓展分区中划分逻辑分区(如果拓展分区被删除,其中的逻辑分区也会被删除);
第一步:查看硬盘使用情况
输入 fdisk -l /dev/sda
,观察硬盘使用情形。
第二步:
输入 fdisk /dev/sda
,进入分割硬盘模式。
序号 | 命令 | 含义 |
---|---|---|
1 | m | 显示所有命令 |
2 | p | 显示硬盘分区 |
3 | a | 设定硬盘启动区 |
4 | n | 设定新的硬盘分区 |
5 | p | 硬盘为[主要]分区(primary) |
6 | e | 硬盘为[延伸]分区(extend) |
7 | t | 改变硬盘分区属性 |
8 | d | 删除硬盘分区 |
9 | q | 不保存退出 |
10 | w | 保持并退出 |
第三步:分区操作
新建分区 ,按
n
设定分区类型(主分区按
p
或拓展分区 按e
)设定分区大小,比如设定2G大小,则输入
+2G
如果之前设定不合理,按
d
选择相应分区删除。
利用 parted进行磁盘分区
前面提到fdisk
最大支持2T的分区,大于这个分区就要使用parted
进行分区。
parted是一个用于硬盘分区或调整分区大小的工具。使用它可以创建、清除、调整、移动和复制ext2、ext3、linux-swap、FAT、FAT32和reiserfs分区;也能创建、调整和移动苹果系统的HFS分区;还能检测jfs、ntfs、ufs和xfs分区。
该工具常用于为新安装的操作系统创建空间,重新分配硬盘使用情况,在将数据拷贝到新硬盘的时候也常常使用。
parted 安装
对于 RHEL/CentOS:
1
sudo yum install -y parted
对于 Debian/Ubuntu:
1
sudo apt install -y parted
parted 启动:
命令行: sudo parted [DeviceName]
注:DeviceName 为指定的磁盘名称;如果不加,则启动系统默认的第一个磁盘。
如果不清楚电脑磁盘情况,输入parted -l device
显示所有可用硬盘的名字,以及其它的有用信息比如储存空间、型号、扇区大小、硬盘标志以及分区信息。
创建硬盘分区
Parted 命令分为两种模式:命令行模式和交互模式:
命令行模式:
parted [option] device [command]
,该模式可以直接在命令行下对磁盘进行分区操作。
1
parted /dev/sdb mklabel gpt mkpart 1 ext3 1 5T
使用所有剩余空间创建分区
1
2sudo parted /dev/sdb mkpart primary ext4 20.0GB 100%
// 命令创建了一个 33.7 GB 的分区,从 20 GB 开始到 53 GB 结束。 100% 使用率允许用户用硬盘上所有剩余的空余空间。
交互模式:
进入交互模式
1
2
3
4
5
6
7
8
9[root@localhost ~]# parted /dev/sdb // 使用parted来对GPT磁盘操作,进入交互式模式
GNU Parted 1.8.1 Using /dev/sdb Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) mklabel gpt // 将MBR磁盘格式化为GPT
(parted) print //打印当前分区
(parted) mkpart primary 0 4.5TB // 分一个4.5T的主分区
(parted) mkpart primary 4.5TB 12TB // 分一个7.5T的主分区
(parted) print //打印当前分区
(parted) quit //退出
Information: Don’t forget to update /etc/fstab, if necessary.
列出电脑上的所有的分区,使用
sudo parted [DeviceName] print
1
sudo parted /dev/sdb print //列出 `/dev/sdb` 所有分区
分区完成之后,使用
mkfs
格式化后,挂载即可使用。
重新调整分区大小
查询磁盘空闲空间,使用
sudo parted [DeviceName] print free
1
parted /dev/sdb print free //列出 `/dev/sdb` 所有分区的空闲空间
调整逻辑卷大小
sudo parted [Disk Name] [resizepart] [Partition Number] [Partition New End Size]
1
2
3sudo parted /dev/sdb resizepart 3 33.0GB //重新调整(增加)分区 3 的结束位置,增加到 33GB
sudo parted /dev/sdb print //确认是否扩容成功
重新调整文件系统大小
sudo resize2fs [DeviceName]
1
$ sudo resize2fs /dev/sdb3
确认分区是否已经扩容
1
$ df -h /dev/sdb[1-3]
删除分区
命令行格式:sudo parted [Disk Name] [rm] [Partition Number]
1
2
3sudo parted /dev/sdb rm 3 //删除分区 3 (/dev/sdb3)
sudo parted /dev/sdb print //查看磁盘情况,检查分区是否删除
设置/更改分区标志
命令行格式: sudo parted [Disk Name] [set] [Partition Number] [Flags Name] [Flag On/Off]
示例:
1
2
3sudo parted /dev/sdb set 2 lvm on //对 /dev/sdb2 设置 lvm 标志
sudo parted /dev/sdb print //查看更改是否成功
查看可用的标志
(parted) help set
1
2
3
4
5
6[root@localhost ~]# (parted) help set
set NUMBER FLAG STATE change the FLAG on partition NUMBER
NUMBER is the partition number used by Linux. On MS-DOS disk labels, the primary partitions number from 1 to 4, logical partitions from 5 onwards.
FLAG is one of: boot, root, swap, hidden, raid, lvm, lba, hp-service, palo, prep, msftres, bios_grub, atvrecv, diag, legacy_boot, msftdata, irst, esp
STATE is one of: on, off
磁盘格式化
linux常见文件系统
磁盘分区完成后,还需要“格式化”,其实就是安装文件系统。所谓文件系统(File System),是文件管理系统的简称,是用来组织数据在存储介质上的存储方式以及检索方式的。
目前,主流操作系统的文件系统如下:
操作系统 | 文件系统 | 备注 |
---|---|---|
windows | FAT、NTFS、ReFS | win10最新的文件系统是ReFS,相比已经被广泛应用的NTFS,弹性文件系统的优势在于能够提供更高的稳定性,可以自动验证数据是否损坏,并尽力恢复数据 |
linux | ext2、2xt3、ext4、xfs等 | 目前在学习的centos7的默认文件系统是xfs |
MacOS | HFS、HFS+、APFS | macOS最新的文件系统是APFS,这是一种专门针对SSD优化的文件系统,最大的特性是原生支持加密。 |
重点看看Linux常用的文件系统:
文件系统 | 最大文件名长度 | 最大文件大小 | 最大分区大小 | 适用场景 | 原因 |
---|---|---|---|---|---|
ext2 | 255 bytes | 2 TB | 16 TB | U盘 | U盘一般不会存很多文件,且U盘的文件在电脑上有备份,安全性要求没那么高,由于ext2不写日志(journal),所以写U盘性能比较好。当然由于ext2的兼容性没有fat好,目前大多数U盘格式还是用fat |
ext3 | 255 bytes | 2 TB | 16 TB | 对稳定性要求高的地方 | 与ext2相比,ext3实现了日志功能,但是ext2的缺点ext3也有 |
ext4 | 255 bytes | 16 TB | 1 EB | 小文件较少 | ext系列的文件系统都不支持inode动态分配,所以如果有大量小文件需要存储的话,不建议用ext4 |
xfs | 255 bytes | 8 EB | 8 EB | 小文件多或者需要大的xttr空间,如openstack swift将数据文件的元数据放在了xttr里面 | xfs支持inode动态分配,所以不存在inode不够的情况,并且xttr的最大长度可以达到64K |
Btrfs | 255 bytes | 16 EB | 16 EB | 没有频繁的写操作,且需要btrfs的一些特性 | btrfs虽然还不稳定,但支持众多的功能,如果你需要这些功能,且不会频繁的写文件,那么选择btrfs |
磁盘格式化工具
mke2fs、mkfs.ext2、mkfs.ext3和mkfs.ext4
注:默认linux这个4个命令是一样的。
命令行格式:mke2fs [参数] [设备名称]
常用参数 | 用法 |
---|---|
-b | 指定数据块块大小,必须是1024的整数倍;centOS7默认是4KB |
-i [字节] | i(小写)指定每个inode 的字节数 |
-I [文件] | I(大写)从指定的文件中读取坏的块大小 |
-N | 设定inode的数量 |
-c | 格式化前先检测磁盘是否有问题;加上这个选项后,格式化速度会非常慢 |
-L | 预设该分区的标签(label) |
-j | 建立ext3格式的分区 |
-t | 制定文件系统类型,如ext2、ext3、ext4等(常用) |
最常用参数: -t
指定分区类型
1
[root@localhost ~]# mke2fs -t ext4 /dev/sdb1
mkfs.xfs
注:mke2fs
并不支持分区格式化为xfs类型,只能使用mkfs.xfs
1
[root@localhost ~]# mkfs.xfs /dev/sdb1
e2label 查看或修改分区标签
注:该命令只支持ext
格式的文件系统,不支持xfs
文件系统
1
2e2label /dev/sdb5 //查看分区label
e2label /dev/sdb5 TEST123 //修改分区label
磁盘挂载/卸载
磁盘格式化后,需要挂载分区才能使用。在挂载分区前,需要先建立一个挂载点,该挂载点是以目录的形式存在的,这个挂载点必须是空目录。一旦把某个分区挂在到该挂载点(目录)下,再往该目录写数据时,就会写到相应的分区当中。
查看系统分区信息
mount
查看已挂载的分区
blkid
查看未挂载的分区
/etc/fstab
文件
输入命令行 cat /etc/fstab
,可以查看启动时需要挂载的分区信息
显示列 | 含义 |
---|---|
1 | 分区标示,label、UUID等 |
2 | 挂载点,比如第1行等挂载点是/ 根目录 |
3 | 分区格式,如图,这里是xfs |
4 | mount等挂载参数(后面单列表格) |
5 | 是否被dump备份,1表示备份,0表示不备份 |
6 | 开机是否自检磁盘,1和2表示检测,1的优先级高于2,即根分区设置为1,其他的分区设置为2;0表示不检测 |
常用参数 | 含义 |
---|---|
sync/async | sync表示时时同步内存和磁盘数据;async 表示异步处理,每隔一段时间再把数据从内存写入磁盘 |
auto/noauto | auto开机自动挂载;noauto不自动挂载 |
ro/rw | ro表示以只读权限挂载;rw表示以读写权限挂载 |
exec/noexec | exec表示允许挂载可执行文件;noexec不允许挂载可执行文件,/ 根目录不要设置为noexec ,否则无法使用系统 |
user/nouser | 表示是否允许root用户之外的其他用户挂载分区。安全起见,使用nouser ,只允许root用户挂载分区 |
suid/nosuid | 是否允许分区有suid属性 |
usrquota | 启动磁盘配额模式,会针对用户限定其使用磁盘额度 |
default | 按照默认值设置挂载定义,包括 rw、suid、 dev、exec、 auto、nouser和async |
分区挂载
方法一:修改/etc/fstab
配置文件
1
/dev/sdb1 /bk ext4 defaults,noatime 1 2
方法二:mount命令挂载
命令行格式:
1
mount [参数] [分区]
常用选项:
-a
将磁盘分区中所有的分区自动挂载上-t
指定挂载分区的类型,默认不指定,会自动识别-o
指定挂载分区的参数特性,即/etc/fstab
第四列的内容。常见的参数比如 rw(可读写)、suid(允许设置uid)、exec(允许挂载可执行文件)等等。
设置分区自动挂载
方法一:编辑 /etc/fstab
cat命令看一下配置文件的格式
blkid命令查询需要添加的 UUID
vim编辑配置文件
修改保存后,重启电脑。
方法二:将挂载命令写入 /etc/rc.d/rc.local
编辑
/etc/rc.d/rc.local
1
2
3
4
5vim /etc/rc.d/rc.local //vim编辑,加入挂载命令
/usr/bin/mount [设备UUID] [挂载点] ///usr/bin/mount 是mount命令等绝对路径
//编辑完成后,保存退出
写入后执行如下命令:
1
chmod a+x /etc/rc.d/rc.local
重启电脑
分区卸载
命令行格式: unmount [参数] [挂载点]
有时挂载点无法删除,是因为当前目录在需要删除的挂载点上,解决的思路:
进入其他目录执行删除操作
使用-l 参数
1
unmout -l /tmp/sd1
手动增加swap空间
swap分区就是虚拟内存,当虚拟内存不够的时候,就需要手动添加。基本思路是:建立swapfile -> 格式化为swap格式 -> 启动虚拟磁盘
建立swapfile
1
dd if= /dev/zero of=/tmp/newdisk bs=1M count=1024
if
指定源,写/dev/zero
,这是一个很神奇的文件;of
指定目标文件;bs
指定块大小;count
指定块的数量;
注:目标文件大小 = bs * count
格式化为swap格式
1
mkswap -f /tmp/newdisk
启动虚拟磁盘
1
swapon /tmp/newdisk
此时,系统提示有安全风险,对该分区修改权限,使用如下命令:
1
chmod 0600 /tmp/newdisk
卸载虚拟磁盘
1
swapoff /tmp/newdisk
主要是LVM相关知识。
逻辑卷管理器lvm
什么是lvm?
LVM全称是Logical Volume Manager,即逻辑卷管理器。它是Linux环境下对磁盘分区进行管理的一种机制;它可以将多个物理分区整合在一起,并且可以根据实际需要动态调整文件系统空间,从而实现磁盘的动态管理。
如上图所示:
Disk(磁盘):接入系统的的物理磁盘。如图所示,就是disk A 和disk B。
PV 物理卷(Physical Volume):组成LVM的最底层的元素,即Linux上的磁盘物理分区。上图中,被分成了3个区。
VG 卷组(Volume Group):将各个独立的PV(物理卷)组合起来形成的一个存储空间就称为VG(卷组)。如上图所示,LVM总和 = VG1 + VG2
LV 逻辑卷(Logical Volume): VG被再次分割,成为可以被用户格式化、挂载并提供数据存储的对象就是LV(逻辑卷)。
由此可以看出,创建LVM的工作流大概是这样的:
添加磁盘分区,在此基础上创建物理分区
PV
;创建卷组
VG
,将物理分区加入卷组;从卷组VG中划分逻辑卷LV,格式化挂载使用。
为什么要使用lvm?
磁盘分区动态管理,实现空间充分利用。
当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁 移到新硬盘,只需把新的分区加入卷组并扩充逻辑卷,不需要关机就可以实现磁盘扩容。
如何创建LVM?
前提准备:安装lvm2
1
yum install -y lvm2
第一步:添加磁盘分区,在此基础上创建物理分区PV
使用fdisk [设备名称]
创建分区,按 n
新建磁盘分区,创建过程与建立普通分区一样。
创建完分区后,按t
将分区的类型改为8e
注:此处如果写错的话,按 Ctrl + u
撤销重新输入。
创建PV,命令行格式 pvcreate [device_name]
1
pvcreate /dev/sdb1
查看PV信息
pvs
简要查看PV信息
1
2
3
4
5
6[root@stevey ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 5.01g 5.01g
/dev/sdb2 lvm2 --- 5.01g 5.01g
/dev/sdc1 lvm2 --- 5.01g 5.01g
/dev/sdc2 lvm2 --- 5.01g 5.01g
pvsdisplay [PV_NAME]
详细查看PV信息
1
2
3
4
5
6
7
8
9
10
11
12[root@stevey ~]# pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "5.01 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 5.01 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID rZsvZG-nMf0-To7I-3k2X-fzEL-jkvk-eNFd6h
第二步:创建卷组VG
,将物理分区加入卷组;
创建卷组:vgcreate [VG_NAME] [PV_NAME]
删除卷组: vgcreate [VG_NAME]
查看VG信息
vgs
简要查看VG信息vgdisplay
详细查看VG信息
缩减卷组相关操作
确定要移除的PV,将此PV上的数据转移至其他的PV。
命令:pvmove PV_NAME
从卷组中将此PV移除
命令:vgreduce /PATH/TO/PV
第三步:创建逻辑卷LV,格式化并挂载
创建逻辑卷
1
lvcreate -L SIZE -n LV_NAME VG_NAME
L 指定逻辑卷的大小
n 指定逻辑卷的名称
查看LV信息
lvs
简要查看VG信息。lvdisplay
详细查看VG信息。
将lv分区格式化
命令行格式: mke2fs -t ext4 [LV_NAME]
注:建议格式化为ext4
格式。
挂载lv分区挂载到某个目录使用
命令行格式:mount [LV_NAME] [挂载点]
注:没有合适的挂载点的话,可以使用mkdir /date
命令创建一个空目录,之后将LV分区挂载到相应的目录下。至此创建的lvm分区就可以使用了。
逻辑卷LV
的扩容和缩容
扩容逻辑卷
针对 ext4
格式
卸载挂载点
umount [LV_NAME]
重新设置逻辑卷大小
lvresize -L [size] [LV_NAME]
检查磁盘错误
e2fsck -f [LV_NAME]
更新逻辑卷信息 resize2fs [LV_NAME]
重新挂载
mount [LV_NAME] [挂载点]
示例:
1
2
3
4
5lvextend -L 120G /dev/mapper/centos-home //增大至120G
lvextend -L +20G /dev/mapper/centos-home //增加20G
lvreduce -L 50G /dev/mapper/centos-home //减小至50G
lvreduce -L -8G /dev/mapper/centos-home //减小8G
resize2fs /dev/mapper/centos-home //执行调整
针对 xfs
格式
执行命令:xfs_growfs -L [size][LV_NAME]
1
2
3lvextend -L 120G /dev/mapper/centos-home //增大至120G
lvextend -L +20G /dev/mapper/centos-home //增加20G
xfs_growfs /dev/mapper/centos-home //执行调整
注意事项:
命令 | 针对文件系统 |
---|---|
resize2fs | 针对的是ext2、ext3、ext4文件系统 |
xfs_growfs命令 | 针对的是xfs文件系统 |
缩容逻辑卷
缩容与之前的扩容大同小异,主要注意到地方在于,缩容之前必须先删除逻辑卷。有时,会发现删除不了
1
2
3
4[root@localhost ~]# umount /home/
umount: /home: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
这表示有进程占用该目录,需要先结束进程 fuser [参数] [dir_name]
1
2[root@localhost ~]# fuser -m -k /home
/home: 1409 1519ce 1531e 1532e 1533e 1534e 1535e 1536e 1537e 1538e 1539e 1541e 1543e 1544e 1545e 1546e 1547e 1548e 1549e 1550e 1601m
之后,再次卸载就可以了。
卷组扩容
工作流:
生成新的物理卷PV
pvcreate [分区名]
将新扩容的物理卷加入卷组
vgextend [VG_NAME] [PV_NAME]
重新设置逻辑卷大小(按照之前LV扩容的方法进行)
磁盘故障小案例
如果因为修改系统挂载点出现不能登陆的状况,只需要登录系统后,运行vim /etc/fstab
,删除错误的配置项即可。
- 上一篇:Session简单实现验证码登录
- 下一篇:JSP
Powered By Cheug's Blog
Copyright Cheug Rights Reserved.