Cheug's Blog

当前位置:网站首页 / Server / 正文

CentOS磁盘管理

2019-05-23 / Server / 1204 次围观 / 0 次吐槽 /

这则笔记主要整理linux磁盘管理的基础知识。

磁盘分区挂载的工作流:

  1. 磁盘分区 (fdisk、parted)

  2. 磁盘格式化 (mkfs.ext2、mkfs.ext3、mkfs.ext4和mkfs.xfs )

  3. 挂载分区 (mount)

  4. 修改 /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,进入分割硬盘模式。

序号命令含义
1m显示所有命令
2p显示硬盘分区
3a设定硬盘启动区
4n设定新的硬盘分区
5p硬盘为[主要]分区(primary)
6e硬盘为[延伸]分区(extend)
7t改变硬盘分区属性
8d删除硬盘分区
9q不保存退出
10w保持并退出

第三步:分区操作

  1. 新建分区 ,按n

  2. 设定分区类型(主分区按 p 或拓展分区 按 e )

  3. 设定分区大小,比如设定2G大小,则输入 +2G

  4. 如果之前设定不合理,按 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
2
sudo 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
3
sudo 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
3
sudo 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
3
sudo 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),是文件管理系统的简称,是用来组织数据在存储介质上的存储方式以及检索方式的。

目前,主流操作系统的文件系统如下:

操作系统文件系统备注
windowsFAT、NTFS、ReFSwin10最新的文件系统是ReFS,相比已经被广泛应用的NTFS,弹性文件系统的优势在于能够提供更高的稳定性,可以自动验证数据是否损坏,并尽力恢复数据
linuxext2、2xt3、ext4、xfs等目前在学习的centos7的默认文件系统是xfs
MacOSHFS、HFS+、APFSmacOS最新的文件系统是APFS,这是一种专门针对SSD优化的文件系统,最大的特性是原生支持加密。

重点看看Linux常用的文件系统:

文件系统最大文件名长度最大文件大小最大分区大小适用场景原因
ext2255 bytes2 TB16 TBU盘U盘一般不会存很多文件,且U盘的文件在电脑上有备份,安全性要求没那么高,由于ext2不写日志(journal),所以写U盘性能比较好。当然由于ext2的兼容性没有fat好,目前大多数U盘格式还是用fat
ext3255 bytes2 TB16 TB对稳定性要求高的地方与ext2相比,ext3实现了日志功能,但是ext2的缺点ext3也有
ext4255 bytes16 TB1 EB小文件较少ext系列的文件系统都不支持inode动态分配,所以如果有大量小文件需要存储的话,不建议用ext4
xfs255 bytes8 EB8 EB小文件多或者需要大的xttr空间,如openstack swift将数据文件的元数据放在了xttr里面xfs支持inode动态分配,所以不存在inode不够的情况,并且xttr的最大长度可以达到64K
Btrfs255 bytes16 EB16 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
2
e2label /dev/sdb5    //查看分区label
e2label /dev/sdb5  TEST123   //修改分区label

磁盘挂载/卸载

磁盘格式化后,需要挂载分区才能使用。在挂载分区前,需要先建立一个挂载点,该挂载点是以目录的形式存在的,这个挂载点必须是空目录。一旦把某个分区挂在到该挂载点(目录)下,再往该目录写数据时,就会写到相应的分区当中。

查看系统分区信息

  • mount 查看已挂载的分区

  • blkid 查看未挂载的分区

  • /etc/fstab文件

输入命令行 cat /etc/fstab ,可以查看启动时需要挂载的分区信息

显示列含义
1分区标示,label、UUID等
2挂载点,比如第1行等挂载点是/ 根目录
3分区格式,如图,这里是xfs
4mount等挂载参数(后面单列表格)
5是否被dump备份,1表示备份,0表示不备份
6开机是否自检磁盘,1和2表示检测,1的优先级高于2,即根分区设置为1,其他的分区设置为2;0表示不检测
常用参数含义
sync/asyncsync表示时时同步内存和磁盘数据;async 表示异步处理,每隔一段时间再把数据从内存写入磁盘
auto/noautoauto开机自动挂载;noauto不自动挂载
ro/rwro表示以只读权限挂载;rw表示以读写权限挂载
exec/noexecexec表示允许挂载可执行文件;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编辑配置文件

按照下面的格式,增加一行,替换UUID等内容即可;

修改保存后,重启电脑。

方法二:将挂载命令写入 /etc/rc.d/rc.local
  • 编辑/etc/rc.d/rc.local

1
2
3
4
5
vim /etc/rc.d/rc.local   //vim编辑,加入挂载命令

/usr/bin/mount [设备UUID] [挂载点]    ///usr/bin/mount 是mount命令等绝对路径

//编辑完成后,保存退出

  • 写入后执行如下命令:

1
chmod a+x /etc/rc.d/rc.local

  • 重启电脑

分区卸载

命令行格式: unmount [参数] [挂载点]

有时挂载点无法删除,是因为当前目录在需要删除的挂载点上,解决的思路:

  1. 进入其他目录执行删除操作

  2. 使用-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的工作流大概是这样的:

  1. 添加磁盘分区,在此基础上创建物理分区PV

  2. 创建卷组VG,将物理分区加入卷组;

  3. 从卷组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 格式

  1. 卸载挂载点 umount [LV_NAME]

  2. 重新设置逻辑卷大小 lvresize -L [size] [LV_NAME]

  3. 检查磁盘错误 e2fsck -f [LV_NAME]

  4. 更新逻辑卷信息 resize2fs [LV_NAME]

  5. 重新挂载 mount [LV_NAME] [挂载点]

示例:

1
2
3
4
5
lvextend -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
3
lvextend -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

之后,再次卸载就可以了。

卷组扩容

工作流:

  1. 生成新的物理卷PV pvcreate [分区名]

  2. 将新扩容的物理卷加入卷组 vgextend [VG_NAME] [PV_NAME]

  3. 重新设置逻辑卷大小(按照之前LV扩容的方法进行)

磁盘故障小案例

如果因为修改系统挂载点出现不能登陆的状况,只需要登录系统后,运行vim /etc/fstab,删除错误的配置项即可。


Powered By Cheug's Blog

Copyright Cheug Rights Reserved.