Linux系统管理实战-磁盘管理


磁盘管理

  • 磁盘分区
  • 磁盘分区 – fdiak / parted
  • 挂载
  • SWAP – 交换分区
  • LVM – 逻辑卷

查看CPU:
# lscpu
# cat /proc/cpuinfo

查看磁盘:
# lsblk

查看内存:
# free -m/h
# cat /proc/meminfo

Linux里磁盘的命名方式

/dev/sda
sd–表示一种串口设备(sata,usb,scsi,sas)

/dev/hda
hd——表示一种并口设备(ide)

/dev/vda
同种设备命名的排序:
第一块设备/dev/sda
第二块设备 /dev/sdb ……
第一个设备的第一个分区/dev/sda1
第二个分区/dev/sda2 ……

磁盘分区

1.为什么要分区?
易于管理和使用,加速文件查找速度
数据安全

2.分区的类型?//磁盘标签
MBR 最大支持2TB以内的硬盘
主分区: 编号1-4,与扩展分区的和不能超过4个,可直接格式化使用
扩展分区:编号1-4,最多只能有一个,不能直接格式化使用
逻辑分区:在扩展分区上划分,编号从5开始, 可格式化使用
分区不是无限分的,对于串口设备,最多15个分区,1-4编号是主分区或者是扩展分区,5-15编号是逻辑分区(MSDOS分区表格式)
GPT 最多可分128个分区,没有主分区扩展分区之说

3.分区相关
1)分区 fdisk -n -p -1 - -+1G -w
2)通知内核重读分区表 partprobe
3)创建文件系统 或称为格式化 mkfs.xxx /dev/sdb1
4)挂载使用 mkdir /sdb1 ; mount /dev/sdb1 /sdb1

4.分区的命令:
fdisk:

    # fdisk /dev/sdb
    # partprobe
    # mkfs.xfs /dev/sdb1         
    # mount  /dev/sdb1 /mnt/sdb1        
    #df  -h

【parted:能够划分2T以上的硬盘,小于2T的也可以分】

如果设备名称被误删怎么办?

    # rm -rf /dev/sdb1
    # mount /dev/sdb1  /mnt/sdb1/
    【mount: 特殊设备 /dev/sdb1 不存在】
    # lsblk 
        NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
        sda           8:0    0   20G  0 disk 
        ├─sda1        8:1    0    1G  0 part /boot
        └─sda2        8:2    0   19G  0 part 
          ├─cl-root 253:0    0   17G  0 lvm  /
          └─cl-swap 253:1    0    2G  0 lvm  [SWAP]
        sdb           8:16   0   10G  0 disk 
        └─sdb1        8:17   0    2G  0 part 
        sr0          11:0    1  4.1G  0 rom  /run/media/root/Cen
    # mknod /dev/sdb1 b 8 17  //创建设备文件   b:块设备  8 17 :主设备号,次设备号
    # mount /dev/sdb1  /mnt/sdb1/

磁盘分区 – fdisk

# fdisk -l /dev/sdb  列出指定设备的分区表信息

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

-------------------------------------------------
一、分区 [主分区]
# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x2656627c 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):m
命令操作
   d   delete a partition   //删除分区
   l   list known partition types   //列出已知分区类型
   m   print this menu   //打印菜单,打印帮助
   n   add a new partition   //创建分区
   p   print the partition table   //打印分区表
   q   quit without saving changes  //不保存退出
   t   change a partition's system id  //更改分区id
   w   write table to disk and exit  //保存并退出
  
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)  //主分区
   e   extended    //扩展分区
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):     
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+1G   //指定分区大小
分区 1 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x2656627c

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分区号 (2-4,默认 2):2
起始 扇区 (2099200-20971519,默认为 2099200):
将使用默认值 2099200
Last 扇区, +扇区 or +size{K,M,G} (2099200-20971519,默认为 20971519):+2G
分区 2 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x2656627c

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     6293503     2097152   83  Linux

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

二、通知内核重读分区表(el6)
查看分区文件是否存在
# ls /dev/sd
sda   sda1  sda2  sdb   sdb1  sdb2 

如果不存在,通知内核重读分区表
# partx -a /dev/sdb    
partx: /dev/sdb: error adding partitions 1-2 

或 # partprobe

内核记录分区表的文件:    # cat /proc/partitions

三、创建文件系统 make file system (格式化)
# mkfs.xfs /dev/sdb1   //命令后接分区

四、挂载使用
    1.创建挂载点
        # mkdir /mnt/sdb1

    2.将分区挂载到本地目录
        # mount /dev/sdb1 /mnt/sdb1

        # df -h
        文件系统             容量  已用  可用 已用% 挂载点
        /dev/mapper/cl-root   17G  3.5G   14G   21% /
        devtmpfs             473M     0  473M    0% /dev
        tmpfs                489M  144K  489M    1% /dev/shm
        tmpfs                489M  7.0M  482M    2% /run
        tmpfs                489M     0  489M    0% /sys/fs/cgroup
        /dev/sda1           1014M  155M  860M   16% /boot
        /dev/sr0             4.1G  4.1G     0  100% /mnt/test
        tmpfs                 98M   16K   98M    1% /run/user/0
        /dev/sdb1           1014M   33M  982M    4% /mnt/sdb1
 
 二、扩展分区 [逻辑分区]
 # fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):p

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x2656627c

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     6293503     2097152   83  Linux

命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): e
分区号 (3,4,默认 3):3
起始 扇区 (6293504-20971519,默认为 6293504):
将使用默认值 6293504
Last 扇区, +扇区 or +size{K,M,G} (6293504-20971519,默认为 20971519):+3G
分区 3 已设置为 Extended 类型,大小设为 3 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x2656627c

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     6293503     2097152   83  Linux
/dev/sdb3         6293504    12584959     3145728    5  Extended

命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 1 extended, 1 free)
   l   logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (6295552-12584959,默认为 6295552):
将使用默认值 6295552
Last 扇区, +扇区 or +size{K,M,G} (6295552-12584959,默认为 12584959):+1G
分区 5 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 1 extended, 1 free)
   l   logical (numbered from 5)
Select (default p): l
添加逻辑分区 6
起始 扇区 (8394752-12584959,默认为 8394752):
将使用默认值 8394752
Last 扇区, +扇区 or +size{K,M,G} (8394752-12584959,默认为 12584959):+1G
分区 6 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):P

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x2656627c

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     6293503     2097152   83  Linux
/dev/sdb3         6293504    12584959     3145728    5  Extended
/dev/sdb5         6295552     8392703     1048576   83  Linux
/dev/sdb6         8394752    10491903     1048576   83  Linux

命令(输入 m 获取帮助):W
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

# ll /dev/sd
sda   sda1  sda2  sdb   sdb1  sdb2  sdb3  sdb5  sdb6  

磁盘分区 – parted

列出所有设备的分区表信息
# parted -l

分区-使用过程:
1.分区
2.通知内核重读分区表
3.格式化
4.挂载使用

parted命令使用:
语法: 
    parted  [选项]  设备   命令  参数
    选项:
        -s      不交互
    常用命令:
    p,print                     打印分区表
    mklabel,mktable       		创建磁盘标签,后面可接msdos或gpt
    mkpart                     	创建新的分区,语法: mkpart  类型或名字  起始  结束
    rm                          删除分区,后接要删除的分区编号
    rescue                      恢复分区,对于误删的分区进行恢复,语法: rescue 起始  结束
*注意:创建磁盘标签将会丢失所有的数据
【在使用parted进行分区时,一定要创建磁盘标签】

1.分区
parted可以对msdos(MBR)或gpt类型的磁盘的进行分区
实验:将sdb分一个主分区,一个扩展分区,在扩展分区中分一个逻辑分区
msdos类型:
1).查看磁盘情况,可以看到没有任何分区
[root@clone1 ~]# parted /dev/sdb p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos            #磁盘标签已经是msdos. 如果不是,需要更改
Disk Flags: 

Number  Start  End  Size  Type  File system  Flags  

2).分一个主分区,大小为500M
[root@clone1 ~]# parted -s /dev/sdb mkpart p 0 500M     #-s 不交互
    P.S: 对于MSDOS类型,此命令中的p表示primary
[root@clone1 ~]# parted /dev/sdb p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB                                #从这里可以看到此磁盘最大位置
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End    Size   Type     File system  Flags
 1      512B   500MB  500MB  primary                            #可以看到已分好
 
3).剩下的空间分到扩展分区中
[root@clone1 rpms]# parted -s /dev/sdb mkpart e 500M 2147M
    P.S: 此处的e表示extended
[root@clone1 rpms]# parted /dev/sdb p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End     Size    Type      File system  Flags
 1      512B   500MB   500MB   primary
 2      500MB  2147MB  1647MB  extended               lba
 
 4).在扩展分区里划分一个逻辑分区
 # parted -s /dev/sdb mkpart l 500M 1000M
		P.S: 此处的l表示logical

====================================================
mklabel  gpt|msdos      //会清空所有数据
p            打印分区表
mkpart 		 类型   起始位置   结束位置            创建分区
rm   分区编号                                             删除分区

挂载

挂载的目的:通过挂载点,得到访问设备的入口
1.挂载的命令
mount
# mount /dev/sdc1 /mnt/sdc1

2.挂载的选项
mount [-t vfstype]  [-o option[,option]...]  device dir
             -t 指定文件系统类型  -o 指定挂载属性
             -a :依照配置文件/etc/fstab的数据将所有未挂载的分区磁盘都挂载
     镜像文件: iso9660       
             
挂载属性:
    ro            只读文件系统 read only
    rw            可读写      read write
    async         异步写入 
    sync          同步写入
    auto/noauto   是否支持开机挂载 
    dev/nodev     是否支持设备文件
    exec/noexec   是否允许分区上拥有可运行二进制文件 
    suid/nosuid   是否允许分区上含有suid/sgid的文件格式
    user/nouser   是否允许分区让任何使用者运行mount
    remount  	  重新挂载已挂载的文件系统
    _netdev       如果连的上就开机挂载,如果连不上就不挂载
    
  defaults
              Use  default  options: rw, suid, dev, exec,
              auto, nouser, and async.

[root@localhost ~]# mount -o ro /dev/sdc1 /mnt/sdc1   //设置为只读文件系统
[root@localhost ~]# cd /mnt/sdc1   
[root@localhost sdc1]# touch a.txt
touch: 无法创建"a.txt": 只读文件系统
[root@localhost sdc1]# mount -o remount,rw /mnt/sdc1  //重新挂载修改属性为读写
[root@localhost sdc1]# touch a.txt
[root@localhost sdc1]# ls a.txt 
a.txt

# vim /etc/fstab
第1列:可以写设备文件名也可以使用设备的uuid   uuid是唯一,建议使用uuid

查看所有设备的uuid
# blkid 
/dev/sda1: UUID="28632ebb-0670-41c3-82cb-642c35dc6232" TYPE="xfs" 
/dev/sda2: UUID="Ac7k0N-2mx5-QIYu-1ToA-Qcqq-X5nN-bf3IKX" TYPE="LVM2_member" 
/dev/mapper/cl-root: UUID="1979fc25-33fa-416e-864a-c35f30fd8a51" TYPE="xfs" 
/dev/mapper/cl-swap: UUID="db0240f7-1a4e-4462-81fc-186f47abfb0d" TYPE="swap" 
/dev/loop0: UUID="2016-12-05-13-55-45-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
[root@server ~]# blkid /dev/sda2
/dev/sda2: UUID="Ac7k0N-2mx5-QIYu-1ToA-Qcqq-X5nN-bf3IKX" TYPE="LVM2_member" 

查看指定设备的uuid
# blkid /dev/sda1
/dev/sda1: UUID="28632ebb-0670-41c3-82cb-642c35dc6232" TYPE="xfs" 

开机挂载
例:希望开机将/dev/sdb1挂载到/mnt/sdb1目录
两种方法:
1. fstab - 这种方法如果有错将导致系统启动失败
  1).修改/etc/fstab,添加以下记录(不含绿色字):
    /dev/sdb1     /mnt/sdb1       xfs                defaults       0            0
    设备名称       挂载点        文件系统类型    挂载属性  dump        fsck
  2).使用mount -a测试
  
2. rc.local - 这个文件是开机过程中执行的一个脚本,不会影响系统启动
  1).修改/etc/rc.d/rc.local,添加挂载命令
    # echo 'mount /dev/sdb1 /mnt/sdb1/' >> /etc/rc.d/rc.local
  2).给此文件加上可执行权限
    # chmod +x  /etc/rc.d/rc.local

问题:如果不小心写/etc/fstab 永久挂载时,重启之后发现系统无法正常启动?

1、输入root的密码,然后回车进入操作系统
2、vim /etc/fstab   //把自己写的挂载取消注释或者删除
3、reboot    //重启

SWAP – 交换分区

制作交换分区
    方法两种:
    1.用分区实现
    2.用文件实现
    
    查看swap
    # free -m
                    total        used    free      shared   buff/cache   available
    Mem:       7856       592     5282        1176        1981        5828
    Swap:      14335     0          14335

    # top
    KiB Swap: 14680060 total, 14680060 free,        0 used.  5967972 avail Mem 

    # swapon -s  
    文件名				类型		     大小           	 已用	  权限
    /dev/dm-1      partition	 14680060	 0       -1

    # swapon -d
    NAME         TYPE        SIZE   USED   PRIO
    /dev/dm-1  partition  14G    0B        -1

第一种方法:用分区实现
    1.准备新分区 
    /dev/sdb2
    
    2.格式化成swap分区
    # mkswap /dev/sdb2
    正在设置交换空间版本 1,大小 = 975868 KiB
    无标签,UUID=0393e1a0-bf52-48d5-9cb7-2fe3dbf2c99a

    3.激活swap分区
    # swapon /dev/sdb2
    
    4.查看swap分区
    # swapon -s
    文件名			  类型	    	大小	        已用	权限
    /dev/dm-1    partition	2097148	0      -1
    /dev/sdb2     partition	975868	0      -2
    
    5.挂载
    # vim /etc/fstab 
    /dev/sdb2       swap   swap  defaults  0 0 

第二种方法:用文件实现
    dd    复制文件,根据设置参数转换为文件命令
            if: input file|device        从 file|device中读而不是标准输入。
            of: output file|device     写到file|device里去而不是标准输出。
            bs: blocksize      块的大小            
            count:                块的数量
    
    /dev/zero 无限0资源设备   
    /dev/null  垃圾桶 黑洞设备文件        
    
    1.使用/dev/zero设备制作1G的/tmp/swap.txt文件 
    # dd if=/dev/zero  of=/tmp/swap.txt   bs=1M  count=1024
    记录了1024+0 的读入
    记录了1024+0 的写出
    1073741824字节(1.1 GB)已复制,2.0213 秒,531 MB/秒
    
    # ll /tmp/swap.txt -h
    -rw-r--r--. 1 root root 1.0G 7月   5 23:33 /tmp/swap.txt
     
     2.格式化成swap分区
     # mkswap /tmp/swap.txt 
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=ca74fb34-8ba0-4ee8-b88e-53949c985c7f
    
    3.激活swap
    # swapon /tmp/swap.txt
    swapon: /tmp/swap.txt:不安全的权限 0644,建议使用 0600。
    
    4.查看swap分区
    # swapon -d
    NAME          TYPE       SIZE USED PRIO
    /dev/sdb2     partition  953M   0B   -1
    /dev/dm-1     partition    2G   0B   -2
    /tmp/swap.txt file      1024M   0B   -3
    
    5.挂载
    # vim /etc/fstab 
    /tmp/swap.txt       swap   swap  defaults  0 0 
--------------------------------- 
卸载swap  
    1.让swap无效      
    # swapoff /tmp/swap.txt 
    # swapoff /dev/sdb2
    
    2.删除/etc/fstab配置文件内的设置
    
    3.删除交换文件
    # rm -rf /tmp/swap.txt
    
    # swapoff -a   //关闭swap交换分区

LVM – 逻辑卷

vm  逻辑卷管理
    磁盘空间的动态划分和管理
    
lvm能够实现分区的动态的拉伸和回缩

lvm的创建过程其实是一个先整合,再划分的过程。

一、LVM的创建过程
    1)添加硬盘或者创建分区,通知内核
    2)创建物理卷 PV (pvcreate) 
    3)创建卷组 VG    (vgcreate)
    4)创建逻辑卷  LV (lvcreate)
    5)创建文件系统    (mkfs.xfs)
    6)挂载使用            (mount autofs /etc/fstab)

1)
# parted /dev/sdd mklabel gpt 
# parted /dev/sdd mkpart primary 1 1G
# parted /dev/sdd mkpart primary  1G 2G
# parted /dev/sdd mkpart primary  2G 3G
# parted /dev/sdd mkpart primary  3G 4G
# ll /dev/sdd
sdd   sdd1  sdd2  sdd3  sdd4  

2)创建物理卷 
# pvcreate /dev/sdd{1..4}
  Physical volume "/dev/sdd1" successfully created.
  Physical volume "/dev/sdd2" successfully created.
  Physical volume "/dev/sdd3" successfully created.
  Physical volume "/dev/sdd4" successfully created.

    2.1)查看物理卷
    # pvs
      PV         VG Fmt  Attr PSize   PFree  
      /dev/sda2  cl lvm2 a--   19.00g      0 
      /dev/sdd1     lvm2 ---  953.00m 953.00m
      /dev/sdd2     lvm2 ---  953.00m 953.00m
      /dev/sdd3     lvm2 ---  954.00m 954.00m
      /dev/sdd4     lvm2 ---  954.00m 954.00m

    # pvscan
      PV /dev/sda2   VG cl              lvm2 [19.00 GiB / 0    free]
      PV /dev/sdd3                      lvm2 [954.00 MiB]
      PV /dev/sdd2                      lvm2 [953.00 MiB]
      PV /dev/sdd4                      lvm2 [954.00 MiB]
      PV /dev/sdd1                      lvm2 [953.00 MiB]
      Total: 5 [22.72 GiB] / in use: 1 [19.00 GiB] / in no VG: 4 [3.72 GiB]

    # pvdisplay  
      "/dev/sdd3" is a new physical volume of "954.00 MiB"
      --- NEW Physical volume ---
      PV Name               /dev/sdd3
      VG Name               
      PV Size               954.00 MiB
      Allocatable           NO
      PE Size               0   
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               kRYrRB-0BZm-Z2h1-tQxu-kDUC-FvQF-4YSZ5L
      ...
   
3)创建卷组
    语法:vgcreate [-s 大小] 卷组的名字  物理卷的设备路径
    # vgcreate -s 8M vg0 /dev/sdd{1..4}
    Volume group "vg0" successfully created

    -s 指定PE大小
        PE(物理扩展单元) 大小(默认是4M)
        
    3.1)
        # vgs
          VG  #PV #LV #SN Attr   VSize  VFree
          cl    1   2   0 wz--n- 19.00g    0 
          vg0   4   0   0 wz--n-  3.72g 3.72g
 
        # vgscan
          Reading volume groups from cache.
          Found volume group "vg0" using metadata type lvm2
          Found volume group "cl" using metadata type lvm2
          
        # vgdisplay 
      --- Volume group ---
      VG Name               vg0
      System ID             
      Format                lvm2
      Metadata Areas        4
      Metadata Sequence No  1
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                0
      Open LV               0
      Max PV                0
      Cur PV                4
      Act PV                4
      VG Size               3.72 GiB
      PE Size               8.00 MiB
      Total PE              476
      Alloc PE / Size       0 / 0   
      Free  PE / Size       476 / 3.72 GiB
      VG UUID               PWOx9H-9eP0-vkdz-v31T-cHxO-C80x-4BAMfE

4)创建逻辑卷      
    # lvcreate -n lv0 -L 1500M vg0
      Rounding up size to full physical extent 1.47 GiB
      Logical volume "lv0" created.
  
        -n 指定lv的名字
        -L 指定lv的大小
        vg0  取vg0卷组的空间做lv
  
    # lvcreate -n lv0 -l 188 vg0  
        -l 指定使用了多少个PE    // -l 100%FREE     指把所有卷组的空间给逻辑卷
            LE 逻辑扩展单元
        
    4.1)  
        #lvs
        #lvscan
        #lvdisplay
            
5)创建文件系统
    # mkfs.xfs /dev/vg0/lv0  

6)挂载
    # mkdir /lv0
    # mount /dev/vg0/lv0 /lv0/
    # vim /etc/fstab 
    /dev/vg0/lv0 /lv0 xfs defaults 0 0

LVM – 逻辑卷管理(扩容和缩容)

xfs和ext4文件系统
    扩容的区别
        扩容文件系统的命令不一样
        xfs    使用的命令是xfs_growfs
        ext4  使用的命令是resize2fs
        
---------------------------------------
扩容:
lv扩容
    在线扩容
    第1种情况:卷组内有空闲空间,直接从卷组取空间
        1)对逻辑卷扩容
        # lvextend -L +500M /dev/vg0/lv0   +表示在原来的空间
    大小上加上多少空间大小
      Rounding size to boundary between physical extents: 504.00 MiB.
      Size of logical volume vg0/lv0 changed from 1.47 GiB (188 extents) to 1.96 GiB (251 extents).
      Logical volume vg0/lv0 successfully resized.
      
        2)对文件系统扩容
        # xfs_growfs /dev/vg0/lv0 
        【如果文件系统是ext4】
        # resize2fs /dev/vg0/lv0
        
     第2种情况:卷组内没有空间
        1)创建新分区
            # parted /dev/sdd mkpart primary  4G 5G    
            # ll /dev/sdd
            sdd   sdd1  sdd2  sdd3  sdd4  sdd5  
            
        2)创建物理卷
            # pvcreate /dev/sdd5
            Physical volume "/dev/sdd5" successfully created.
            
        3)加入卷组 vg扩容
            # vgextend vg0 /dev/sdd5
            Volume group "vg0" successfully extended
            
        4)对逻辑卷扩容    
            # lvextend -L 4500M /dev/vg0/lv0 
              Rounding size to boundary between physical extents: 4.40 GiB.
              Size of logical volume vg0/lv0 changed from 1.96 GiB (251 extents) to 4.40 GiB (563 extents).
              Logical volume vg0/lv0 successfully resized.

        5)对文件系统扩容
            # xfs_growfs /dev/vg0/lv0 
			【如果文件系统是ext4】
       		 # resize2fs /dev/vg0/lv0
       		 
  -----------------------------------------------
  	XFS不支持缩容

	ext4支持缩容  
   
 缩容:
ext4缩容   
lv缩容
    注意:
        1.风险大有可能造成数据的损坏
        2.确保缩减后的空间大小依然能存储原来的所有数据
        3.不要在线缩容
        4.在缩减之前强制检查文件系统

现在要在创建一个逻辑卷lv1,lv1的大小要求为1G,卷组内没有空间,但逻辑卷lv0的空间过大,缩减lv0,给lv1

        给lv0缩减
            1)先卸载
                # umount /lv0
               
            2)强制检查文件系统
                # e2fsck -f /dev/vg0/lv0    
                       
            3)缩减文件系统
                # resize2fs /dev/vg0/lv0  1800M
                
            4)缩减逻辑卷
                # lvreduce -L 1800M /dev/vg0/lv0                  
            
            5)测试缩减逻辑卷后逻辑卷能否正常使用
                # mount /dev/vg0/lv0 /lv0
                # cd /lv0
                # cat 
                lost+found/ test.txt    
                # cat test.txt 
                ext4
                # df -h
                文件系统             容量  已用  可用 已用% 挂载点
                /dev/mapper/cl-root   17G  4.3G   13G   26% /
                devtmpfs             473M     0  473M    0% /dev
                tmpfs                489M   84K  489M    1% /dev/shm
                tmpfs                489M  7.1M  482M    2% /run
                tmpfs                489M     0  489M    0% /sys/fs/cgroup
                /dev/sda1           1014M  155M  860M   16% /boot
                tmpfs                 98M   16K   98M    1% /run/user/42
                tmpfs                 98M     0   98M    0% /run/user/0
                /dev/mapper/vg0-lv0  1.7G  6.1M  1.6G    1% /lv0
扩容案例:
# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs     17G  16G   1G    96% /
/dev/mapper/centos-home xfs		10G  1G    9G    10% /home
  
当发现根分区使用已超过96%,目前没有新的磁盘,但是发现 /home 目录多余空间,问怎么去给根分区扩容?
1、做备份, /home 目录做一个备份
# tar caf home.tar.gz /home

2、取消挂载,删除home逻辑卷
# umount /home
# lvremove /dev/centos/home

3、给root逻辑卷进行扩容
# vgdisplay     //查看一下剩余多少PE块

# lvextend -l +2559 /dev/centos/root

# xfs_growfs /dev/centos/root             //通过上面信息可得知,root逻辑卷的文件系统是xfs

4、把备份的home.tar.gz  里面的内容放到/home
# tar xf home.tar.gz
# mv home/* /home/

原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/268077.html

(0)
上一篇 2022年6月19日
下一篇 2022年6月19日

相关推荐

发表回复

登录后才能评论