Linux磁盘管理
Linux在使用过程中产生的数据量不断增大,逐渐导致初始配置的磁盘空间不足,这时候就需要进行扩容,以满足业务需求。一般情况下会选择新添加磁盘,本文介绍了如何将新磁盘分区、格式化、挂载或制作LVM逻辑卷,进行磁盘空间扩容。
1. 基本分区
磁盘的分区格式一共有两种:
一种是GPT分区,GPT最多支持128个主分区,没有扩展分区和逻辑盘,支持任意容量的磁盘分区。
一种是MBR分区,做多四个主分区,可以做三个主分区加一个扩展分区,扩展分区可以做成许多逻辑分区,但分区总数量不能超过14,2T容量以下的硬盘分区一般常用MBR格式分区。
添加新磁盘后,通过lsblk(list block)命令列出所有可用的块设备,查看新磁盘是否添加成功。
图中的sdb盘是一块新添加的20G磁盘,需要通过分区、格式化、挂载来对磁盘进行处理才可以使用。
1.1 MBR分区
fdisk /dev/sdb #使用fdisk对磁盘开始分区
命令参数如图所示,常用的有:
d 删除一个分区
g 创建一个新的GPT分区表
n 添加一个新的分区
o 创建一个新的MBR分区表
p 打印分区表
q 退出不保存
w 保存并退出
输入n,选择添加一个新的分区
选择p创建主分区,选择e创建扩展分区,回车选择默认值即可
分区号和起始扇区都回车选择默认值即可,Last扇区一步需要手动输入想要划分的分区大小+size{K,M,G}
最后一步输入w退出并保存,第一个分区设置完成
再次lsblk查看,sdb磁盘下已经分出sdb1分区,大小为10G,下一对该分区制作文件系统并挂载
-
一般Linux的本地文件系统使用最多是xfs和ext4两种文件系统格式,根据需要选择
mkfs.xfs /dev/sdb1
mkfs.ext4 /dev/sdb1
输入mkfs.xfs /dev/sdb1,将sdb1分区制作成xfs格式的文件系统
最后一步,创建目录,将sdb1分区挂载在该目录下即可
mkdir /mnt/guazai
mount /dev/sdb1 /mnt/guazai
此时sdb1分区已经挂载,可以开始写入,但目前只是临时挂载,更换终端或重启后需要再次手动挂载,所以最好做成开机自动挂载,在/etc/fstab文件内加上以下内容,即可开机自动挂载
/dev/sdb1 /mn/guazai xfs defaults 0 0
分区 挂载点 文件系统类型 文件系统属性 不备份 不检查
#添加完成后使用mount -a命令检查,添加错误会导致系统启动出错,谨慎操作!
1.2 GPT分区
GPT分区使用gdisk命令,其他与fdisk命令操作方法基本一致,按提示进行操作即可
分区添加成功后,制作文件系统、挂载、自动挂载操作同前文
2. LVM逻辑卷分区
基本分区大小无法调整,写入数据占满时便无法继续使用,整体数据迁移又非常麻烦,而LVM逻辑卷分区的特点就是可以随意扩容,规避磁盘占满时的数据丢失风险。
-
物理卷(Physical Volume,PV):也就是将物理磁盘分区转化为LVM可识别的值。
-
卷组(Volume Group,VG):PV的集合
-
逻辑卷(Logic Volume,LV):VG中画出来的一块逻辑磁盘
首先引入PV、VG、LV的概念,物理磁盘或者磁盘分区转换为物理卷,一个或多个物理卷聚集形成一个或多个卷组,而逻辑卷就是从某个卷组里面抽象出来的一块磁盘空间。
2.1 创建逻辑卷
step1
pvcreate /dev/sdc #将新磁盘sdc制作成物理卷
创建完成后使用pvs、pvscan、pvdisplay任意一个即可查看
step2
vgcreate vg1 /dev/sdc #创建卷组vg1并将物理卷/dev/sdc加到卷组
创建完成后使用vgs、vgscan、vgdisplay任意一个即可查看
由于/dev/sdc是一块20GB的新磁盘,所以vg1剩余空间为20GB
step3
lvcreate -L +10G -n lv1 /dev/vg1 #从vg1卷组拿10GB空间做成逻辑卷lv1
lvcreate -l +100%FREE -n lv1 /dev/vg1 #将vg1卷组全部剩余空间做成逻辑卷lv1
创建完成后使用lvs、lvscan、lvdisplay任意一个即可查看
step4
mkfs.xfs /dev/vg1/lv1 #制作文件系统
mkdir /mnt/lv1 #创建挂载点目录
mount /dev/vg1/lv1 /mnt/lv1 #挂载
echo "/dev/vg1/lv1 /mnt/lv1 xfs defaults 0 0" >>/etc/fstab #开机自动挂载
2.2 逻辑卷扩容
当卷组内空间充足时,直接从卷组内拿空间给逻辑卷扩容或创建新逻辑卷
当卷组内空间不足时,添加磁盘制作成物理卷给卷组扩容,再从卷组拿空间给逻辑卷扩容
vgextend vg1 /dev/sdd(xincipan) #卷组扩容
lvextend -L +10G /dev/vg1/lv1 #逻辑卷扩容
逻辑卷扩容后需要给相应的文件系统扩容才可生效
xfs_growfs #xfs文件系统扩容
resize2fs #ext4文件系统扩容
3. swap交换分区
Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。
3.1 基本分区、LVM制作交换分区
使用free -m或swapon -s查看当前swap分区信息
步骤:
制作一个新的基本分区或逻辑卷
mkswap /dev/sdb1 或 mkswap /dev/vg1/lv1
#初始化为swap分区
echo "/dev/sdb1 swap swap defaults 0 0"
或
echo "/dev/vg1/lv1 swap swap defaults 0 0"
#制作开机挂载
swapon -a
#激活swap分区(读取/etc/fstab)
swap分区制作成功
3.2 大文件制作交换分区
首先使用dd命令创建一个足够大而空的文件
dd if=/dev/zero of=/mnt/file bs=1000M count=20 #在/mnt下创建一个名为file大小为20G的文件
input file output file block大小 数量
输入文件 输出文件
mkswap /mnt/file #格式化该文件
echo "/mnt/file swap swap defaults 0 0" >>/etc/fstab #制作开机挂载
swapon -a #激活
swapon -s #查询
4. 注意事项
-
当磁盘已经添加了一个MBR(GPT)分区后,又想转换为GPT(MBR)分区时
首先fdisk(gdisk)该分区,使用d参数删除分区,w参数保存退出 parted -s /dev/sdb mklabel gpt #将/dev/sdb(MBR格式)转换成(GPT格式) parted -s /dev/sdb mklabel msdos #将/dev/sdb(GPT格式)转换成(MBR格式) 转换完成后重新进行分区操作
-
第一个分区设置完成后未重启设置第二个分区时会报如图的错误
partprobe /dev/sdb或kpartx /dev/sdb 更新磁盘分区表,手动让内核更新分区表。不需要重启
-
分区或逻辑卷挂载时最好是空目录,因为挂载后会将目录下的东西覆盖,卸载后才能访问
-
mount命令挂载时可以-o指定下列参数 -o 指定文件系统属性 rw 读写 ro 只读 noexec 不允许执行二进制文件 exec 允许执行二进制文件 auto mount -a 开机自动挂载 remount 在线重新挂载
-
lvremove #逻辑卷移除 vgremove #卷组移除 pvremove #物理卷移除
-
umount /dev/sdb #卸载 umount -l /dev/sdb #强制卸载
-
从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失!因为转换格式要格式化硬盘!