走进Linux服务器之一:Linux操作基础9——Linux磁盘管理(二)

前言

之前我们讨论了关于硬盘的基本知识、如何分区、创建文件系统(格式化)、挂载和卸载,以及如果对要打算作为交换分区的分区做后两步操作,现在我们来讨论关于磁盘管理的其他部分的知识。

一、逻辑卷LVM

逻辑卷LVM(Logical Volume Manager),它是Linux环境下对磁盘分区进行管理的一种机制,性质与基本的磁盘没有区别。特点是可以随意扩张大小,缩减大小,快照备份。

我们先了解一些术语:

  • PV:物理卷(Physical volume)
  • VG:卷组(Volume Group)
  • LV:逻辑卷(Logical Volume)

1.创建LVM

  • 创建pv

将物理磁盘,传换成物理卷PV:

我们可以用pvcreate指令:

pvcreate /dev/sdf
Physical volume "/dev/sdf" successfully created.

这里显示我们的磁盘sdf已经成功创建为物理卷。

  • 创建vg

创建卷组VG:

我们用vgcreate指令创建卷组。

vgcreate的格式是 vgcreate+卷组名+卷组成员:

vgcreate vg1 /dev/sdf
Volume group "vg1" successfully created
  • 创建逻辑卷

创建逻辑卷与上面同理,用lvcreate指令:

创建逻辑卷,-L 参数后面指定大小, -n参数后面指定卷名,最后面要加上组成逻辑卷的卷组名:

lvcreate -L 4G -n lv1 vg1
Logical volume "lv1" created.

在这里我们用卷组vg1创建了一个大小为4G,名字为lv1的逻辑卷。

  • 创建文件系统并挂载

我们可以先用mkfs指令创建文件系统,并且挂载:

mkfs.ext4 /dev/vg1/lv1

注意这里的路径为/dev/卷组名/逻辑卷名

之后会显示信息:

mkfs.ext4 /dev/vg1/lv1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
262144 inodes, 1048576 blocks
52428 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

接下来我们就可以创建挂载的目录并且挂载我们的逻辑卷了:

mkdir /mnt/lv1
mount /dev/vg1/lv1 /mnt/lv1

这之后我们用df指令就可以看到已经挂载的逻辑卷:

df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  974M     0  974M   0% /dev
tmpfs                   tmpfs     991M     0  991M   0% /dev/shm
tmpfs                   tmpfs     991M   11M  980M   2% /run
tmpfs                   tmpfs     991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  4.2G   13G  25% /
/dev/sda1               xfs      1014M  172M  843M  17% /boot
tmpfs                   tmpfs     199M   28K  199M   1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg1-lv1     ext4      3.9G   16M  3.6G   1% /mnt/lv1

可以看到最后一行就是我们的逻辑卷lv1。

2.VG管理

当我们的逻辑卷LVM的空间不够使用的时候,需要进行逻辑卷的扩充,我们需要先扩充卷组VG

首先还是要先创建新的pv:

pvcreate /dev/sdg
Physical volume "/dev/sdg" successfully created.

我们可以用指令pvs查看所有的物理卷:

pvs
  PV         VG     Fmt  Attr PSize   PFree   
  /dev/sda2  centos lvm2 a--  <19.00g       0 
  /dev/sdf   vg1    lvm2 a--   <5.00g 1020.00m
  /dev/sdg          lvm2 ---    5.00g    5.00g

接着,我们可以利用命令 vgextend扩充卷组:

vgextend vg1 /dev/sdg
Volume group "vg1" successfully extended

以此类推,我们可以用vgs来查看卷组:

vgs
VG     #PV #LV #SN Attr   VSize   VFree
centos   1   2   0 wz--n- <19.00g    0 
vg1      2   1   0 wz--n-   9.99g 5.99g

可以看到vg1卷组有两个物理卷,创建了1个逻辑卷,大小为10G,有空闲的6G

3.LV扩容

在我们给VG扩充之后,就可以给LV进行扩容。

首先要先观察VG是否有足够的空间,用上面的vgs指令即可。

接着我们用lvextend来进行扩容:

lvextend -L +4G /dev/vg1/lv1

Size of logical volume vg1/lv1 changed from 4.00 GiB (1024 extents) to 8.00 GiB (2048 extents).
Logical volume vg1/lv1 successfully resized.

输出表示扩充逻辑卷成功。

但是这个时候我们如果用df指令查看逻辑卷大小,发现大小没有改变:

df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  974M     0  974M   0% /dev
tmpfs                   tmpfs     991M     0  991M   0% /dev/shm
tmpfs                   tmpfs     991M   11M  980M   2% /run
tmpfs                   tmpfs     991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  4.2G   13G  25% /
/dev/sda1               xfs      1014M  172M  843M  17% /boot
tmpfs                   tmpfs     199M   28K  199M   1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg1-lv1     ext4      3.9G   16M  3.6G   1% /mnt/lv1

接下来我们还要对文件系统进行扩容

利用指令resize2fs ( resize to file system)来进行文件系统的扩充:

resize2fs /dev/vg1/lv1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg1/lv1 is mounted on /mnt/lv1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg1/lv1 is now 2097152 blocks long.

现在我们再用df查看逻辑卷大小:

df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  974M     0  974M   0% /dev
tmpfs                   tmpfs     991M     0  991M   0% /dev/shm
tmpfs                   tmpfs     991M   11M  980M   2% /run
tmpfs                   tmpfs     991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  4.2G   13G  25% /
/dev/sda1               xfs      1014M  172M  843M  17% /boot
tmpfs                   tmpfs     199M   28K  199M   1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg1-lv1     ext4      7.8G   18M  7.4G   1% /mnt/lv1

可以看到,逻辑卷已经被扩充了4G的大小。

4.删除逻辑卷

删除逻辑卷就是创建逻辑卷的逆向操作,也就是卸载、删除逻辑卷、删除卷组、删除物理卷:

umount /dev/vg1/lv1
lvremove /dev/vg1/lv1
vgremove /dev/vg1
pvremove /dev/sdf

二、高级存储管理

1.文件系统详解

文件系统的存在,让文件准确放入到磁盘某个位置以及快速定位读取成为了可能。

比较大众的文件系统有

Windows: FAT16,FAT32,NFTS

Linux:EXT3, EXT4, XFS

其中,EXT3,EXT4都为索引(index)文件系统。

索引即为目录,相当于一本字典的前十几页。

由于索引等文件系统的限制,文件系统大小的限制如下:

EXT3:文件系统最大16TB

EXT4:文件系统最大16TB

XFS:文件系统最大100TB

下面我们以EXT4文件系统为例:

  • 分块block

在文件系统中,我们一般将非索引的空间分块,称为block,一个block大小为4096B(4KB)。

block存储文件的实际数据,实际存储的文件的内容如果比较大,会占用多个block。

block大小默认为4KB。

一个块不能同时存储不同的文件,如果我们要存储一个5KB和一个2KB的文件,那么第一个文件将会占据第一个块的全部,以及第二个块的1KB,第二个文件不能占用第二个块,只能占据第三个块的2KB空间。

存储一个文件的块可以是不连续的。如果有一个文件系统,删除了其中一个文件,在都被占用的块之间流出了几个空位,那么再次创建的文件将先把这些空位填满,然后再在整个文件系统的后面占用新块。

  • 索引inode

inode的i即为index(索引),node即为结点。inode记录着文件的属性(文件的元数据metadata)。

文件的元数据包括文件的属性、大小、权限、属组、属主、链接数、块的数量和编号等等……

在文件系统中,一个文件占用一个inode,同时记录此文件数据所在的block number。

inode的大小为128 Bytes。

  • 超级块 superblock

超级块是对inode和block的整体说明。

超级块会存储block和inode的总量,以及已经使用和没有使用的inode、block数量(通过索引位图和数据位图)。

我们可以创建一个文件,观察inode信息:

ll -i 文件名:

touch 1.txt
ll -i 1.txt
11 -rw-r--r--. 1 root root 0 Feb  4 09:14 1.txt

我们可以看见文件1.txt的inode即为11号。

我们可以用df -i查看inode的数量:

df -i
Filesystem               Inodes  IUsed   IFree IUse% Mounted on
devtmpfs                 249227    514  248713    1% /dev
tmpfs                    253483      1  253482    1% /dev/shm
tmpfs                    253483   1116  252367    1% /run
tmpfs                    253483     16  253467    1% /sys/fs/cgroup
/dev/mapper/centos-root 8910848 155601 8755247    2% /
/dev/sda1                524288    340  523948    1% /boot
tmpfs                    253483     18  253465    1% /run/user/0
/dev/sr0                      0      0       0     - /run/media/root/CentOS 7 x86_64
/dev/sdb1                131072     10  131062    1% /mnt/disk1
/dev/sdc1                 65536     10   65526    1% /mnt/disk2

我们可以看到分区sdc1一共有65536个inode,还有65526个可用。

我们创造大量文件,观察inode的使用情况:

touch file{1..65527}
touch: cannot touch ‘file65527’: No space left on device

这个时候显示file65527无法创建,设备没有空间,这个时候我们用wc计数:

ls -l | wc -l
65527

但是这个时候我们再看磁盘空间大小:

df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  974M     0  974M   0% /dev
tmpfs                   tmpfs     991M     0  991M   0% /dev/shm
tmpfs                   tmpfs     991M   11M  980M   2% /run
tmpfs                   tmpfs     991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  4.2G   13G  25% /
/dev/sda1               xfs      1014M  172M  843M  17% /boot
tmpfs                   tmpfs     199M   24K  199M   1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0 100% /run/media/root/CentOS 7 x86_64
/dev/sdb1               ext4      2.0G  6.3M  1.8G   1% /mnt/disk1
/dev/sdc1               ext4      976M  4.4M  905M   1% /mnt/disk2

可以看到sdc1还有905M的可用空间。

虽然现在不能再创建新的文件,因为inode已经被占满,但是可以向里面书写内容。

磁盘空间的限制依据inode和block两方面,请清理掉填满的分区,避免不必要的报错。

2. 文件链接

  • 符号链接

symbolic link 软链接。

我们首先创建一个文件,并且输入内容:

touch /file1
echo 1111 > /file1

我们用重定向在/file1中写入了1111。

如果我们想在当前文件夹里查看这个file1,可以ln(link)创建软链接:

ln -s /file1 /mnt/disk2/file1

这样我们就在当前目录下创建了一个叫做file1的软链接,它的目标位置为/file1。

接下来我们来观察这个软链接:

ll /mnt/disk2/file1
lrwxrwxrwx. 1 root root 6 Feb  4 09:36 /mnt/disk2/file1 -> /file1

首先在权限前面的类型位,为l(d为目录),代表着这个文件为链接文件。后面为它的目标地址。

我们在对这个链接文件进行操作的时候,对于它的目标文件采取同样的操作。

如果我们删除软链接文件,源文件不受影响,反过来,软链接文件将会闪烁,不可用。

实际上,软链接记录的只是源文件的绝对路径。

  • 硬链接

首先需要注意的是,硬链接必须在一个分区下面做。

创建硬链接的时候,不要加上 -s:

echo 222 > /file2
ln /file2 /file2-h1
ls -l /file2 /file2-h1
-rw-r--r--. 2 root root 4 Feb  4 09:46 /file2
-rw-r--r--. 2 root root 4 Feb  4 09:46 /file2-h1

我们可以看到,创建了file2和硬链接file2-h1,这两个文件的链接数都是2.

接着:

ln /file2 /file2-h2
ls -l /file2 /file2-h1 /file2-h2
-rw-r--r--. 3 root root 4 Feb  4 09:46 /file2
-rw-r--r--. 3 root root 4 Feb  4 09:46 /file2-h1
-rw-r--r--. 3 root root 4 Feb  4 09:46 /file2-h2

这个时候链接数变为3。

如果我们删除掉file2,那么file2-h1和file2-h2依旧可以看到内容:

rm -rf /file2
cat /file2-h1
222
cat /file2-h2
222

硬链接只能针对文件做,不能对目录做。

硬链接只能在同分区做。

三、 创建软RAID

我们准备四块硬盘(虚拟机):

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 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    5G  0 disk 
├─sdb1            8:17   0    2G  0 part 
├─sdb2            8:18   0  200M  0 part 
├─sdb3            8:19   0  200M  0 part 
├─sdb4            8:20   0    1K  0 part 
├─sdb5            8:21   0  200M  0 part 
├─sdb6            8:22   0  200M  0 part 
├─sdb7            8:23   0  200M  0 part 
└─sdb8            8:24   0    2G  0 part 
sdc               8:32   0    5G  0 disk 
├─sdc1            8:33   0    1G  0 part 
└─sdc2            8:34   0    1G  0 part 
sdd               8:48   0    5G  0 disk 
sde               8:64   0    5G  0 disk 
├─sde1            8:65   0    1G  0 part 
├─sde2            8:66   0    1G  0 part 
└─sde3            8:67   0    3G  0 part 
sdf               8:80   0    5G  0 disk 
└─vg1-lv1       253:2    0    8G  0 lvm  
sdg               8:96   0    5G  0 disk 
└─vg1-lv1       253:2    0    8G  0 lvm  
sdh               8:112  0    5G  0 disk 
sdi               8:128  0    5G  0 disk 
└─sdi1            8:129  0    1G  0 part 
sdj               8:144  0    1G  0 disk 
sdk               8:160  0    1G  0 disk 
sdl               8:176  0    1G  0 disk 
sdm               8:192  0    1G  0 disk 
sr0              11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64

下面的sdj,sdk,sdl,sdm即为新加的四块1G硬盘。

我们组一个RAID5,三块数据盘,一块热备盘:

mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{j,k,l,m}

-C代表创建,-l5代表level5,RAID5,-n3代表三块数据盘+校验盘,-x1代表一块热备盘。如果是n4,那么就三块数据,一块校验,没有热备。这里我们用sdj,sdk,sdl,sdm四块硬盘创建了RAID5:

mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{j,k,l,m}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

接下来我们格式化并挂载:

mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
130816 inodes, 523264 blocks
26163 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done 

mkdir /mnt/raid5
mount /dev/md0 /mnt/raid5

这个时候我们用df -hT查看:

df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  974M     0  974M   0% /dev
tmpfs                   tmpfs     991M     0  991M   0% /dev/shm
tmpfs                   tmpfs     991M   11M  980M   2% /run
tmpfs                   tmpfs     991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  4.2G   13G  25% /
/dev/sda1               xfs      1014M  172M  843M  17% /boot
tmpfs                   tmpfs     199M   20K  199M   1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0 100% /run/media/root/CentOS 7 x86_64
/dev/md0                ext4      2.0G  6.0M  1.9G   1% /mnt/raid5

由于四块盘分工如下:

1G1G1G1G
数据数据校验热备

所以可用数据只有2G。

我们可以用mdadm -D查看RAID详细信息:

mdadm -D /dev/md0
/dev/md0:
           Version : 1.2	
     Creation Time : Thu Feb  4 10:03:50 2021
        Raid Level : raid5
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Thu Feb  4 10:05:47 2021
             State : clean 
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 7075d8cb:c85a2a6f:bc7e1f86:71800d2c
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8      144        0      active sync   /dev/sdj
       1       8      160        1      active sync   /dev/sdk
       4       8      176        2      active sync   /dev/sdl

       3       8      192        -      spare   /dev/sdm

总结

本文我们讨论了逻辑卷、文件系统和廉价冗余磁盘阵列(RAID)相关的知识,至此,关于磁盘管理相关的知识就到此为止,接下来我们将讨论查找和压缩相关的知识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值