Linux磁盘管理

思路:
选择地皮(硬盘参数) -》 整合空间(阵列配置或磁盘弹性管理) -》 划分区域(分区) -》 装修(文件系统、挂载) -》 入住使用(检查、监控)
一块硬盘 -> 多块硬盘(Raid、LVM)

磁盘内外结构:
1、SATA《SCSI《SAS(主流),硬盘接口类型
2、RAID,磁盘管理阵列技术,将多块独立的物理磁盘整合成一个大的逻辑磁盘(物理硬件:磁盘阵列卡)。
   提高磁盘容量、存储效率(拆分后并行存储)和存储安全(有冗余)。
   Raid0   不损失容量,容易坏,存储效率高(一份数据并行写入)
   Raid1   总容量减半,提升存储安全,存储效率不高(有镜像,两个镜像同时写,一份数据同时两次写入)
   Raid5   整合0和1,企业用的最多,总容量-1块容量,有效率也有镜像(一份数据只写一次,写到多个硬盘里,有校验位,用于恢复数据),只允许坏一块盘(一般会配一块热备盘,随时能顶上,多一重保险)
   Raid10  先做0再做1,或者先做1再做0,允许同时两块盘出现故障,总容量减半(容量损失大)

raid配置方法:
   按照现有物理硬盘个数进行配置(将多个物理硬盘配置成一块逻辑磁盘),然后手工选择raid级别。

分区:

磁盘引导记录
(0磁头0磁道1扇区512字节的引导数据,保证系统正常的启动):主引导记录MBR(446字节)+磁盘分区表DPT(64字节)+结束标识(2字节)

磁盘分区表:
    一块磁盘(可以是raid以后的硬盘,也可以是LVM以后的硬盘)中最多可以划分4个主分区(编号是1-4,不一定全用上),最多可以划分1个扩展分区(主分区中拿出1个),在扩展分区中可以划分多个逻辑分区(逻辑分区的基础是扩展分区,必须先有扩展分区才能有逻辑分区,扩展分区不能直接存放数据,逻辑分区从5开始)

磁盘分区方法和步骤(两种):
centos7以前,小容量分区(小于2T):fdisk
cenos7以后,大容量分区:fdisk parted

方法1:
    准备一块硬盘,开始操作:
    1、检查磁盘
    fdisk -l 列出来所有磁盘信息
      磁盘命名规则:sda, sdb, sdc, ...
    1.1、磁盘分区规划
        举例:2个主分区各100G,1个扩展分区(包含2个50G逻辑分区)
    2、分区
    >fdisk /dev/sdb  进入界面:
        m: 帮助
        d:删除指定分区
        g:创建GPT类型分区表(大容量分区时用到,GPT是DPT的一种类型,默认是DOS分区表类型)
        l:显示系统已知的分区类型
        n:创建一个新分区
        p:输出显示设置的分区表信息(默认是扇区大小)
        u:修改显示输出单位(扇区还是柱面)
        q:不保存退出
        w:保存退出
        
    分区操作:
    n + 回车,选p
    选p,回车,回车,+100G(+容量)   主分区1
   n + 回车,选p
    选p,回车,回车,+100G(+容量)   主分区2
    n + 回车,选e
    选e,回车,回车,回车(剩余所有容量)   扩展分区3
   n + 回车,选l
    选l,回车,回车,+50G(+容量)     逻辑分区1
    p + 回车,进行查看
    w + 回车,保存退出
    
  3、检查磁盘
    >fdisk -l /dev/sdb
===================================
 方法2:
    准备一块硬盘(大于2T),开始操作:

parted命令:
1、检查磁盘
>parted /dev/sdc print
   Partition Table:unknow 分区表状态是未知的
2、分区
模式1:交互模式
  >parted /dev/sdc 回车
   help 回车,查看帮助    
            常用命令
            help/help + 具体指令  帮助
            mklabel LABEL-TYPE  创建分区表(这个必须做)
            mkpart PART-TYPE [FS-TYPE] START END  创建分区,大容量磁盘的分区表类型都是GPT(因为单个分区的大小就可能超过2T),而且没有主分区数量限制,可以多于4个主分区。
            print 显示磁盘分区情况
            quit  直接退出(parted命令自动保存分区配置情况)
            rm NUMBER 删除指定编号分区

    mklabel gpt 回车,   创建分区表
    print 回车,        查看
    mkpart primary 0 3T 回车, 选择忽略  (可以按照数值划分)
    print 回车,        查看
    rm 1,              删除第一个分区
   mkpart primary 0 50% 回车, 选择忽略  (可以按照百分比划分)
   mkpart primary 50%  100%  回车, 选择忽略  (可以按照百分比划分)
   rm 1,
    rm 2,
    mkpart primary 0  -1  回车, 选择忽略(全部分配)
   rm 1,
    mkpart primary 0 10G,
   mkpart primary 10G 20G,
   mkpart primary 20G 30G,
   mkpart primary 30G 40G,
   mkpart primary 40G 50G,可以超过4个主分区,GPT无主分区限制

    rm 1, rm 2, rm 3, rm 4, rm 5, 
    mkpart primary 0 3T 回车,
    quit  退出

3、检查磁盘
parted /dev/sdc print

模式2:
免交互,命令模式
parted /dev/sdc rm 1
parted /dev/sdc print
parted /dev/sdc mklabel msdos
parted /dev/sdc print

可以写成脚本执行:cat parted.sh
#/bin/bash
parted /dev/sdc mklabel gpt Yes
parted /dev/sdc mkpart primary 0 3T Ignore
parted /dev/sdc print

直接执行上述脚本即可(fdisk也能写,但是没有这么简单)
    
fdisk命令:
1、检查磁盘
fdisk /dev/sdd

2、分区
g + 回车,修改好分区表类型(切换)
n + 回车,此时没有了主分区个数限制
主分区编号输入1,大小+3T,回车,建好
w + 回车 保存

3、检查磁盘
fdisk -l /dev/sdd
fdisk -l 查看全部

4、其他
fdisk /dev/sdd
d + 回车,删除分区
o + 回车,恢复磁盘分区表为DOS的,此时主分区个数变为4个。

分区建议:


文件系统

创建文件系统的过程等价于对磁盘进行格式化操作。
Linux的文件系统有数十种,常见的:
ext3(最早期,日志文件系统,把写入动作的细节记录下来),centos5(默认文件系统格式)
ext4(支持1EB容量,目录可以支持无限多的子目录,能够批量分配block块),centos6,rhel6
xfs(高性能的日志文件系统,意外宕机后可以快速恢复,支持18EB容量),centos7,rhel7


创建文件系统操作:
1、小容量分区
parted -l 查看分区情况,此时File System是空的

创建ext4 (命令:mkfs - make file system)
mkfs -t ext4 /dev/sdb1 创建完毕

parted -l 查看分区情况


mkfs -t xfs /dev/sdb2

blkid 查看文件系统
lsblk -f 查看文件系统(树状)


2、大容量分区
mkfs -t ext4 /dev/sdc1  大容量分区速度相对慢 (自学:mkfs.ext4 /dev/sdc1)
mkfs -t xfs /dev/sdd1   xfs相对较快

lsblk -f 查看

磁盘管理维护
文件系统检测修复:

检测(先备份后再进行检测,以防丢失):
fsck [参数] [磁盘分区/目录信息]
-a   自动检测和修复
-r   交互模式
-t   指定文件类型

fsck -t ext4 /dev/sdb1
fsck -t ext4 /dev/sdc1 大容量分区也可以检测
fsck -t xfs -r /dev/sdb2 或者 fsck -t xfs -a /dev/sdd1

xfs_repair 自学

说明:fsck多用于企业中有大量数据存储时,会出现文件系统混乱情况的检测。规避业务和服务器的高峰期再做,否则有性能损失。

挂载,卸载
挂载点 - 入口(目录,磁盘分区的入口,linux没有盘符的概念)
转移挂载 - 同一个目录可以是不同磁盘分区的入口


操作:
mount - 用于挂载文件系统(给指定磁盘分区设置一个入口)
挂载是使用硬盘设备前所执行的最后一步操作。

格式: mount 参数 存储设备 挂载点目录   (挂载点目录最好是一个空目录)
        -a    挂载所有在/etc/fstab中定义的文件系统
        -t    指定文件系统的类型(用处不大)

举例:
临时挂载(重启后不默认挂载):
#在linux系统中读取光驱中的数据
查看光驱设备是否存在
> ll /dev/cdrom


>mount  /dev/cdrom   /mnt    说明:/mnt是系统默认的挂载目录 (光驱自身的特点:写保护)


>cd mnt 

#创建的分区挂载
>ll  /dev/sdb1
> mount /dev/sdb1 /xiaoQ_mount/
> df -h (检查挂载情况)
cd /xiaoQ_mount 即可读写

reboot重启系统后查看是否为临时挂载,检查后发现挂载配置失效。


永久挂载:
方式一:利用/etc/rc.local文件实现永久挂载,系统每次启动或重启都会加载的文件,并且会加载文件中的命令信息。
vim /etc/rc.local
    mount /dev/sdb1 /xiaoQ_mount

    
实体文件必须有执行权限,否则不能生效

    
reboot 重启

方式二:利用/etc/fstab文件进行永久挂载,该文件会加载的是磁盘存储设备挂载信息(专用文件)


man fstab文件获取帮助信息

04列:权限选项和存储服务的设置有关,自学
06列:用的是fsck命令

vim /etc/fstab
    /dev/sdb1     /xiaoQ_mount   ext4 defaults 0  0
    wq!

改完以后:
(1)本次手工mount,等待重启生效 
(2)热加载:
    mount -a
(3)reboot重启

卸载:
 umount 参数 挂载点目录   卸载文件系统,等价于将存储设备的入口给取消掉。
    -l  表示不用进行目录切换,完成挂载点目录的卸载(当前在目录中,可以用这个参数)
    -f  表示在挂载点目录中,如果有数据信息服务或系统加载,可以实现强制卸载

umount /xiaoQ_mount/

umount -lf /xiaoQ_mount/   (当前vim打开的)

卸载文件系统要慎用:需要备份(记录)挂载点目录,并且做永久配置(注释掉);文件系统正在使用的情况下不要卸载。

==================
磁盘弹性管理:
LVM技术(逻辑卷管理)
linux系统特有的命令,对磁盘分区进行管理的一种机制,解决的问题是: 初始安装linux操作系统时,无法准确评估各分区的大小,所以难以分配合适的硬盘空间。
不用lvm技术的做法:按照规划分区,待分区空间不足的时候,对数据进行迁移,然后清理完毕后使用。但是数据迁移很可能会出问题,同时增加了运维工作量。(如小房子换大房子,要搬家)

lvm可以让用户在无需停机的情况下可以方便的调整各个分区大小,即动态调整磁盘容量,从而提高磁盘管理的灵活性。


LV是用户真正可以使用的空间(支持弹性扩容、缩容)。
举例:自助餐披萨
PV:整张披萨  PE:小切块   VG:盛盘里的披萨  LV:自己盘子里的披萨

全部命令:


逻辑卷操作环境准备

    物理卷创建和删除
    1、虚拟机重新创建一个新的磁盘
    2、分区
    fdisk /dev/sdb
    n 回车 回车
    p +500M
    n 回车 回车
    p +500M
    w 保存退出
    
    查看 fdisk -l /dev/sdb
    ll /dev/sdb* 查看设备文件是否生成

 yum install -y lvm2  安装lvm包(默认系统不自带)
    自学:https://www.cnblogs.com/kky12345/p/16878761.html

逻辑卷功能基础配置(pvs、vgs、lvs三个查看命令应该结合着看)
    pvcreate /dev/sdb1 /dev/sdb2   (注意:PV设置时,对应的磁盘分区默认不要做过文件系统创建,否则会有问题)
    pvdisplay 查看(此时未产生PE)
    pvs 简单查看
    ( pvremove /dev/sdb1 /dev/sdb2 移除PV,恢复为正常磁盘分区 )

    vgcreate vg1 /dev/sdb1  /dev/sdb2   vg1是vg的名称,自定义
    vgs 简单查看
    vgdisplay 查看(PE已产生,默认4M一个)

    lvcreate -L 200M -n lv1 vg1 创建lv1(-L lv的大小, -n lv的名称, vg1 从哪个vg里分配容量)
    lvs 简单查看
    lvdisplay 详细查看

    mkfs -t ext4 /dev/vg1/lv1   (文件系统名称 /dev/mapper/vg1-lv1)
    说明: lv初始化为ext4格式的文件系统,支持动态扩容和缩容;如果初始化为xfs格式的文件系统,仅支持扩容,不支持缩容(即使能缩容,也有可能导致数据丢失,不建议做)
    
    mount /dev/vg1/lv1 /mnt  临时挂载
    df -h 查看
    cd /mnt 进行读写

逻辑卷扩容过程实践
扩容100M

(1)vgs 查看剩余容量,是否满足需要
(2)lvextend -L +100M /dev/vg1/lv1   (说明:1、扩容多少就+多少; 2、执行完毕以后仅仅是磁盘识别了增加的这部分空间,但文件系统还没有识别,所以df -h的容量不变)
    也可以lvextend -L 300M /dev/vg1/lv1  直接扩容到300M 
(3)lvs 查看
(4)df -h 查看,容量未变
(5)resize2fs /dev/vg1/lv1  需要执行识别文件系统的命令,适用于ext4格式的文件系统
      xfs_growfs /dev/vg1/lv1 适用于xfs格式的文件系统扩容
(6)df -h 查看,容量改变

扩容不需要执行umount和mount操作


逻辑卷缩容过程实践

缩容100M
    注意:
    缩容是比较危险的操作:
        缩容操作可能会对文件系统造成损坏,有可能是不可逆的,不能修复;
        缩容过程有可能会直接损坏数据(如:不做检查直接缩容);
        虚拟机做缩容可能会报错。(企业中尽量不要做磁盘缩容操作)
(1)卸载存储空间
    umount /mnt
    df -h
(2)e2fsck -f /dev/vg1/lv1  扫描/检测要缩容的文件系统(必须做:因为如果不做扫描而直接缩容,可能损坏数据)
(3)resize2fs /dev/vg1/lv1 200M 文件系统去扫描识别缩容以后剩余的200M空间(缩容到多少就写多少),等价于缩容
(4)mount /dev/vg1/lv1 /mnt  (不严谨的话,此步骤就算结束了,只识别200M)
(5)umount /mnt
(6)lvreduce -L 200M /dev/vg1/lv1  真正缩容(输入y确认)
(7)lvs 简单查看当前容量
(8)mount /dev/vg1/lv1 /mnt
(9)df -h 查看磁盘空间情况


逻辑卷组扩容过程实践

1、vgs 检查是否需要扩容
2、虚拟机关机,添加新的磁盘
3、fdisk -l    发现新磁盘 /dev/sdc
4、分区(可选)
fdisk /dev/sdc
n 回车
  p 回车 回车 全盘为一个分区
5、直接创建pv(不做第4步骤)
pvcreate /dev/sdc
pvs 查看结果
6、逻辑卷组扩容
vgextend vg1 /dev/sdc
vgs 查看结果


逻辑卷组缩容过程实践

1、vgs 检查是否需要缩容
2、vgreduce vg1 /dev/sdc  直接缩容出硬盘来
3、vgs 和 pvs 查看结果
4、pvremove /dev/sdc 释放磁盘(sdc恢复成正常的磁盘分区或者存储设备)


lvm逻辑卷知识总结:
lvm逻辑卷管理优势:
  1、可以对磁盘的容量进行灵活管理
  2、可以避免日后工作中数据迁移问题;
LVM逻辑卷管理劣势:
    1、可能会对磁盘的性能造成影响;(物理磁盘的读写很快:分区、格式化后正常使用是最快的)
        实际使用中:磁盘01 ---- raid --- lvm  --- 使用  (有逻辑层面的软件处理或者操作系统处理过程,磁盘性能会下降)
    2、可能会对磁盘的文件系统有损坏。比如:缩容
        文件系统损坏等价于对磁盘的数据有损坏
    3、如果有条件尽量使用存储设备;(尽量不要使用软件化的存储应用,在大的使用环境下有局限性)


=========================
  磁盘管理常用操作:


备份和清理

磁盘管理数据空间释放案例:
    两个原因:
    i_count 和 i_nlink 两个参数都归0后,空间才真正释放

文件:硬链接和软链接
https://blog.youkuaiyun.com/yaxuan88521/article/details/125216682


文件未被占用的情况(i_nlink不为0的情况):
> ll -i 文件名
> find / -type f -inum "inode号"  查找指定相同inode编码硬链接文件
可能会查到多个文件,如果直接删除大容量的文件,很可能删不干净。

> find / -type f -inum "inode号"  -delete  连查带删  (exec 或者 | xargs都可以)
或者 rm -rf 找到的文件名
真正删除文件(含硬链接)

文件被占用的情况(i_count不为0的情况,方案是:清空文件而不是删除):
> ps -ef | grep 文件名
或者
> lsof | grep 文件名   (lsof安装方法: > yum install -y lsof) 查看进程占用文件或目录的情况

磁盘管理文件系统只读案例:

-r 交互方式:


如果记得UUID的值,可以:
> mount -o rw, remount UUID=xxxxxxx /  

如果不记得UUID了,可以如下操作:

此时,可以vi /etc/hosts文件了。

然后修复故障点: vi /etc/fstab的UUID修改回去。


磁盘管理系统空间不足案例:

测试环境准备:


sdb1 - 10G
sdc1 - 512M
建好分区,创建好文件系统,并完成挂载。

磁盘空间不足演示 - block不足:
dd命令:

 dd if=/dev/zero of=/tmp/5G.txt bs=10M count=500
 ll -h /tmp/5G.txt  -h 以人类可读的方式

解决办法:先找到大容量的文件
方法1:
    df -h 查看容量不足的挂载点    
    find 目录 -type f -size +1G (目录下查找容量大于1G的文件,1G是预估的值) 
    然后进行备份,然后迁移或者清理或者扩容。
 
方法2:
    效率比较高的:
    du命令,查看文件或目录的存储量

    du  -sh /etc     -s 汇总/etc下文件的大小,-h 以人类可读的方式
    
   du -sh /     统计根目录下所有文件的大小
    du -sh /*    显示/开始的一级目录和文件的大小
    

    du -sh /* | sort    sort默认以第一列为已经排序(字符排序,不是值排序)
   du -sh /* | sort -h   正序
    du -sh /* | sort -hr  逆序
   du -sh /* | sort -k 1 -hr  逆序(-k,指定某一列)

清理:

磁盘空间不足演示 - inode不足(小文件数据太多):

模拟生成大量的小文件的方法:


报错:

查找原因:


df -i 查看inode的数量情况

解决方法:

    

报错:清理的文件太多引起

找到小于10k的文件:


find ./ -type f -size -10k > 1.txt
对1.txt里的文件进行分析,看哪些需要留下或者清理

或者直接清理:


交换分区:
磁盘管理交换分区扩容案例


linux系统出现内存不足,不会蓝屏,会出现oom错误(内存溢出情况)

swap分区的大小无需过大,本身效率还是比较低的,不能替代物理内存, 建议1G-8G即可。

swap分区临时扩容的方法:
> fdisk /dev/sdb
  n 回车 回车
  p 回车 1G
  w 保存退出
>fdisk -l /dev/sdb 查看分区情况
> mkswap /dev/sdb1  格式化为swap分区
> lsblk -f 查看分区情况
> swapon /dev/sdb1 扩容
> free -h 查看情况

缩容的方法:
> swapoff /dev/sdb1
或者> swapoff -a 直接取消全部的交换分区,比较危险,慎用!!

系统重启后,自动生效的方法,修改/etc/fstab文件:

说明:swap交换分区只是用于临时缓解内存不足的情况,如果长时间内存出现不足,建议真实扩容内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值