【Linux系统管理】09 文件系统管理 & 高级文件系统管理

一 文件系统管理

1.1 硬盘结构

1.1.1 硬盘的逻辑结构

img

每个扇区的大小事固定的,为512Byte。扇区也是磁盘的最小存贮单位。0 磁道,0 扇区 指的就是第一个磁道的第一个扇区。一般是磁盘的最开始的位置,一般存放系统的启动的正确引导程序。加载内核和启动程序。硬盘的转速一般现在已经恒定在 7200 转/秒 = 133MB/s,转速越快读写速度越快,为什么不提高转速呢?因为转速太快,可能会导致磁盘烧毁。

img

img

硬盘的大小是使用“磁头数×柱面数×扇区数×每个扇区的大小”这样的公式来计算的。其中磁头数(Heads)表示硬盘总共有几个磁头,也可以理解成为硬盘有几个盘面,然后乘以二;柱面数(Cylinders)表示硬盘每一面盘片有几条磁道;扇区数(Sectors)表示每条磁道上有几个扇区;每个扇区的大小一般是512Byte。

如图:一共有3个盘片,那么就是正反共6个盘面,一个盘面一个磁头,那么就是共6个磁头。

磁盘存储术语 CHS(Cylinder Head Sector)

  • head:磁头;每个盘面上一个读写磁头,盘面号即磁头号。所有磁头在磁头臂作用下同时内外移动,即任意时刻,所有磁头所处的磁道号是相同的。(磁头数 = 盘面数)
  • track:磁道;每个盘面被划分成许多同心圆,这些同心圆轨迹叫做磁道(属于逻辑上的概念);磁道从外向内从0开始顺序编号。(磁道数 = 柱面数)
  • sector:扇区,512 bytes;将一个盘面划分为若干内角相同的扇形,这样盘面上的每个磁道就被分为若干段圆弧,每段圆弧叫做一个扇区。每个扇区中的数据作为一个单元同时读出或写入。硬盘的第一个扇区,叫做引导扇区。
  • cylinder:柱面;所有盘面上的同一磁道构成一个圆柱,称作柱面。柱面数据空间= 512 ⨉ sector数/track ⨉ head数。51263255/1024/1024=7.84M,CentOS 5 之前版本Linux 以柱面的整数倍划分分区,CentOS 6之后可以支持扇区划分分区。(0柱面:将磁盘的所有盘面中的最外圈的0磁道抽象出来就是零柱面。同理就可以知道1柱面等。)

CentOS 5之前的版本 Linux 以柱面的整数倍划分分区,CentOS 6之后可以支持以扇区划分分区。

范例:

~ echo "scale=2;512*63*255/1024/1024" | bc
7.84

#查看CHS
#CentOS6操作系统
~ fdisk -l /dev/sda

Disk /dev/sda: 536.9 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00034f2c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         256     2048000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             256       13004   102400000   83  Linux
/dev/sda3           13004       25752   102400000   83  Linux
/dev/sda4           25752       65271   317438976    5  Extended
/dev/sda5           25752       26262     4096000   82  Linux swap / Solaris

#CentOS6以后的操作系统
~ fdisk -u=cylinders -l /dev/sda
Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors
Geometry: 255 heads, 2 sectors/track, 65270 cylinders
Units: cylinders of 510 * 512 = 261120 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc72b9136

Device     Boot  Start     End Cylinders  Size Id Type
/dev/sda1  *         5    8229      8225    2G 83 Linux
/dev/sda2         8229  419435    411207  100G 83 Linux
/dev/sda3       419435  830641    411207  100G 83 Linux
/dev/sda4       830641 2056032   1225391  298G  5 Extended
/dev/sda5       830645  847093     16449    4G 82 Linux swap / Solaris

范例:识别SSD和机械硬盘的类型

lsblk --help
# 1表示机械硬盘,0表示固态硬盘
~ lsblk -d -o name,rota
NAME ROTA
sda     1
sdb     1
sdc     1
sr0     1

~ ls /sys/block
sda  sdb  sdc  sr0
~ cat /sys/block/*/queue/rotational
1
1
1
1
~ cat /sys/block/sda/queue/rotational
1
~ cat /sys/block/sdb/queue/rotational
1
~ cat /sys/block/sdc/queue/rotational
1
~ cat /sys/block/sr0/queue/rotational
1

范例:扫描磁盘

for i in {0..32} ;do echo '- - -' >  /sys/class/scsi_host/host$i/scan ; done

img

区位记录磁盘扇区结构ZBR(Zoned Bit Recording)

img

ZBR 区位记录(Zoned-bit recording)是一种物理优化硬盘存储空间的方法,或指对磁道进行分区域,在不同区域采用不同密度以提高磁盘容量的记录方法。特点是内部磁道的扇区数目较少,外部磁道的扇区数目较多。在使用ZBR的硬盘,在最外面的环带中的轨道上的数据将具有最高数据传输率。

数据在划分分区时,越是小的编号,数据读写越快。因为机械硬盘在从外向内的编号是从0开始向内增加,磁头在机械硬盘最外层转一圈读写的数据比内层转一圈读写的数据多和快。

同一时间内,磁头在磁盘的内圈访问的扇区数是远远比外圈访问的扇区数少的。(角速度不同)

硬盘优化性能提高的策略:

在机械硬盘,尽量将经常访问的数据存放在磁盘的外圈。

磁道的编号是最外圈为0,不断向内,编号不断的增加。

CHS 和 LBA

CHS( Cylinder / Head / Sector )

  • CHS 采用 24bit 位寻址
  • 其中前 10 位表示 cylinder(柱面),中间 8 位表示 head(磁头),后面 6 位表示sector(扇区)。
  • 最大寻址空间 8GB

~ echo 2^24*512/1024/1024 | bc

8192

LBA(Logical Block Addressing)

  • LBA 称为 逻辑块寻址
  • LBA 是一个整数,通过转换成 CHS 格式完成磁盘具体寻址。
  • ATA-1 规范中定义了 28 位寻址模式,以每个扇区 512 位组来计算,ATA-1 所定义的 28位LBA 上限到达 128 GiB。2002 年 ATA-6规范采用了 48位LBA,同样以每扇区 512 组计算容量上限可达 128 Petabytes。

由于 CHS 寻址方式的寻址空间在大概 8 GB 以内,所以在磁盘容量小于大概 8GB时,可以使用 CHS 寻址方式或者是 LBA 寻址方式;在磁盘容量大于大概 8GB时,则只能使用 LBA 寻址方式。

1.1.2 硬盘接口

  • IDE硬盘接口(Integrated Drive Electronics,并口,即电子集成驱动器)也称作“ATA硬盘”或“PATA硬盘”,是早期机械硬盘的主要接口,ATA133硬盘的理论速度可以达到133MB/s(此速度为理论平均值),IDE硬盘接口
  • SATA 接口(Serial ATA,串口)是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。目前已经是SATA三代,理论传输速度达到600MB/s(此速度为理论平均值)
  • SCSI接口(Small Computer System Interface,小型计算机系统接口)广泛应用在服务器上,具有应用范围广、多任务、带宽大、CPU占用率低及支持热插拔等优点,理论传输速度达到320MB/s

固态硬盘 / 机械硬盘生产再快也没有用,因为接口受限了,那么传输速率依旧还是会受到制约。

CPU > Memory > Disk。我们采用分级存储的概念,CPU 内会有L1 1级缓存,L2 2级缓存,L3 3级缓存,Memory,Disk。用来弥补CPU和硬盘之间的速度差。这样做的价值最划算,经济实惠。

1.2 文件系统

1.2.1 Linux 文件系统的特性

  • super block(超级块):记录整个文件系统的信息,包括block 与inode 的总量,已经使用的inode 和 block的数量,未使用的inode和 block的数量,block 与inode的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间等。
#查看超级块信息
dumpe2fs -h /dev/sda1
#查看块组
dumpe2fs /dev/sda1
  • date block (数据块,也称作 block):用来实际保存数据的(柜子的隔断),block的大小 ( 1KB、2KB或4KB ) 和数量在格式化后就已经决定,不能改变,除非重新格式化(制作柜子的时候,隔断大小就已经决定,不能更改,除非重新制作柜子)。每个blcok只能保存一个文件的数据,要是文件数据小于一个block块,那么这个block的剩 余空间不能被其他文件是要;要是文件数据大于一个block 块,则占用多个block块。Windows中磁盘碎片整理工具的原理就是把一个文件占用的多个block 块尽量整理到一起,这样可以加快读写速度。在Linux 系统下默认大小是 4KB。
  • inode ( i 节点,柜子门上的标签 ):用来记录文件的权限(r、w、x),文件的所有者和属组,文件的大小,文件的状态改变时间(ctime),文件的最近一次读取时间(atime),文件的最近一次修改时间(mtime),文件的数据真正保存的block 编号。每个文件需要占用一个inode。

1.2.2 Linux 常见文件系统

文件系统描述
extLinux中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用
ext2是ext文件系统的升级版本,Red Hat Linux 7.2版本以前的系统默认都是ext2文件系统。于1993年发布,支持最大16TB 的分区和最大 2TB的文件( 1TB=1024GB=1024×1024KB )
ext3是ext2文件系统的升级版本,最大的区别就是带日志功能,以便在系统突然停止时提高文件系统的可靠性。支持最大16TB的分区和最大2TB的文件
ext4是ext3文件系统的升级版。ext4在性能、伸缩性和可靠性方面进行了大量改进。ext4的变化可以说是翻天覆地的,比如向下兼容ext3、最大1B文件系统和16TB文件、无限数量子目录、Extents连续数据块概念、多块分配、延迟分配、持久预分配、快速FSCK,日志校验、无日志模式、在线碎片整理、inode增强、默认启用barrier 等。它是CentOS6.x的默认文件系统
xfsXFS 最早针对IRIX操作系统开发,是一个高性能的日志型文件系统,能够在断电以及操作系统崩溃的情况下保证文件系统数据的一致性。它是一个64 位的文件系统,后来进行开源并且移植到了Linux 操作系统中,目前CentOS 7.x 将XFS+LVM作为默认的文件系统。据官方所称,XFS对于大文件的读写性能较好。
swapswap是Linux中用于交换分区的文件系统(类似于Windows中的虚拟内存),当内存不够用时,使用交换分区暂时替代内存。一般大小为内存的2倍,但是不要超过2GB。它是Linux的必需分区
NFSNFS 是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源
iso9660光盘的标准文件系统。Linux要想使用光盘,必须支持iso9660文件系统
fat就是Windows下的fat16文件系统,在Linux中识别为fat
vfat就是windows 下的fat32文件系统,在Linux中识别为vfat。支持最大32GB的分区和最大4GB的文件
NTFS就是Windows下的NTFS文件系统,不过Linux默认是不能识别NTFS文件系统的,如果需要识别,则需要重新编译内核才能支持。它比fat32文件系统更加安全,速度更快,支持最大2TB的分区和最大64GB的文件(Linux默认不识别NTFS,需要添加插件或编译内核添加功能,即使识别NTFS只能是只读,并非读写。)
ufssun公司的操作系统solaris和 SunOs所采用的文件系统
procLinux中基于内存的虚拟文件系统,用来管理内存存储目录/proc
sysfs和proc一样,也是基于内存的虚拟文件系统,用来管理内存存储目录/sysfs
tmpfs也是一种基于内存的虚拟文件系统,不过也可以使用swap交换分区

1.3 常用的硬盘管理命令

1.3.1 df 命令

~ df -ahT
选项
#	-a:显示特殊文件系统,这些文件系统几乎都是保存在内存中的。如/proc,因为是挂载在内存中,所以占用量都是0
#	-h:单位不再只用KB,而是换算成习惯单位
#	-T:多出了文件系统类型一列

范例:

~ df -aTh

1.3.2 du 命令

~ du [选项] [目录或者文件名]
选项:
#  -a:显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
#  -h:使用习惯单位显示磁盘占用量,如 KB,MB或GB等
#  -s:统计总占用量,而不列出子目录和子文件的占用量

du与df的区别:du是用于统计文件大小的,统计的文件大小是准确的;df是用于统计空间大小的,统计的剩余空是准确的。

lsof / grep deleted 查看被删除的文件,然后一个进程一个进程的手工 kill 也是可以的

ls 统计目录大小是不准确的。ls 查看的目录的 Block 数据块的大小。/boot 默认 Block 大小是 1KB(CentOS 6)但在CentOS 7系统上 /boot 默认 Block 大小是 4KB。

df 查看分区的大小 和 sh 查看目录文件的大小,会发现查看 / 的大小会不一样。当系统是纯净的系统时,可能会查看到 du -sh / 和 df -aTh / 查看的根目录空间一致;如果真实服务器,使用的时间越长,长期不重启,会发现 du -sh / 和 df -aTh / 统计的数值差距越大。df 统计的是空间大小,除了文件占用空间,还有临时文件以及删除文件的空间是需要重启机器才能释放的。

1.3.3 fsck 文件系统修复命令

~ fsck -y /dev/sdb1
#自动修复

1.3.4 显示磁盘状态 dumpe2fs

#查看卷组
~ dumpe2fs /dev/sda1

~ dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>		#卷标名
Last mounted on:          /boot			#挂载点
Filesystem UUID:          e9741541-4d73-4552-ac5a-7c8f935c51b8		#UUID
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl		#挂载参数
Filesystem state:         clean							#文件系统状态,正常
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              128016			#Inode总数
Block count:              512000			#块总数
Reserved block count:     25600
Free blocks:              446431			#块空余总数
Free inodes:              127976			#Inode空余总数
First block:              1
Block size:               1024				#块大小
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2032
Inode blocks per group:   254					#Inode的大小
Flex block group size:    16
Filesystem created:       Sun Jun 19 17:10:16 2022
Last mount time:          Sat Jul  9 17:17:39 2022
Last write time:          Sat Jul  9 17:17:39 2022
Mount count:              7
Maximum mount count:      -1
...省略部分输出...
Group 0: (Blocks 1-8192) [ITABLE_ZEROED]		#第一个数据组的内容
  Checksum 0x84c5, unused inodes 2012
  Primary superblock at 1, Group descriptors at 2-3
  Reserved GDT blocks at 4-259
  Block bitmap at 260 (+259), Inode bitmap at 276 (+275)
  Inode table at 292-545 (+291)
  3819 free blocks, 2013 free inodes, 2 directories, 2012 unused inodes
  Free blocks: 4373, 4375-8192
  Free inodes: 19, 21-2032
...省略部分输出...

#查看超级块信息
dumpe2fs -h /dev/sda1 
##dumpe2fs只能查看 ext 类型文件系统

1.3.5 查看文件的详细时间

stat 文件名 #查看文件的详细时间

#例如
stat reset.sh
  File: ‘reset.sh’	#文件名
  Size: 30193           Blocks: 64         IO Block: 4096   regular file
  #文件大小							占用块							系统分区块大小
Device: fd00h/64768d    Inode: 201326666   Links: 1
#存放文件的设备					Inode 号						硬链接数
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
#权限										属主								属组
Access: 2021-11-22 22:38:54.221990696 +0800
Modify: 2021-11-22 22:38:46.134991173 +0800
Change: 2021-11-22 22:38:52.488990799 +0800
#Access 访问时间
#Modify 数据修改时间
#Change 状态修改时间
 Birth: -
 #Linux 不查看文件的创建时间

1.3.6 判断文件类型

file 文件名		#判断文件类型
type 命令名		#判断命令类型

范例:

~ file reset.sh
reset.sh: Bourne-Again shell script, UTF-8 Unicode text executable
~ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aaf05615b6c91d3cbb076af81aeff531c5d7dfd9, stripped

主要用于写 Shell 脚本判断使用。

1.4 fdisk 命令手工分区

1.4.1 fdisk -l

查看系统所有硬盘及分区

#关机添加新的硬盘,然后重启机器识别新的硬盘。需要注意机器的IP地址网络信息是否正确。	
#不关机添加新的硬盘,刷新系统的硬盘列表
for i in {0..2} ; do echo '- - -' > /sys/class/scsi_host/host$i/scan ;done

~ lsblk /dev/sdb
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  200G  0 disk

~ fdisk -l /dev/sdb

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

1.4.2 fdisk /dev/sdb

进行磁盘分区(分区还没有分区号)

fdisk 交互式指令说明

命令说明
a设置可引导标记
b编辑bsd磁盘标签
c设置DOS操作系统兼容标记
d删除一个分区
l显示已知的文件系统类型。82为Linux swap分区,83为Linux分区
m显示帮助菜单
n新建分区
o建立空白DOS分区表
p显示分区列表
q不保存退出
s新建空白SUN磁盘标签
t改变一个分区的系统ID
u改变显示记录单位
v验证分区表
w保存退出
x附加功能(仅专家)

n新建分区——p主分区——1分区号——1起始柱面——分区大小+100M——w

~ fdisk /dev/sdb
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):
 1
First cylinder (1-26108, default 1): 1
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-26108, default 26108): +100M #会有一定的大小误差,底层是以柱面进行划分

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

~ fdisk -l /dev/sdb

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc5bc0308

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          14      112423+  83  Linux

n新建分区——e扩展分区——2 分区号——124 起始柱面——1024柱面(所有剩余空间都分配给扩展分区)

~ fdisk /dev/sdb
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (15-26108, default 15): 124
Last cylinder, +cylinders or +size{K,M,G} (124-26108, default 26108): 1024

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc5bc0308

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          14      112423+  83  Linux
/dev/sdb2             124        1024     7237282+   5  Extended

Command (m for help): w
The partition table has been altered!

n新建分区——l 逻辑——不用指定分区号——124 起始柱面——+100M(指定大小)——w

~ fdisk /dev/sdb
Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (124-1024, default 124):
Using default value 124
Last cylinder, +cylinders or +size{K,M,G} (124-1024, default 1024): +100M

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc5bc0308

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          14      112423+  83  Linux
/dev/sdb2             124        1024     7237282+   5  Extended
/dev/sdb5             124         137      112423+  83  Linux

Command (m for help): w
The partition table has been altered!

查看分区列表情况

~ lsblk /dev/sdb
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdb      8:16   0   200G  0 disk
├─sdb1   8:17   0 109.8M  0 part
├─sdb2   8:18   0     1K  0 part
└─sdb5   8:21   0 109.8M  0 part

有时候因为系统的分区表正忙碌,则需要重新启动系统之后才能使得新的分区表生效

Command (m for help): w			#保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16:

Device or resource busy.
The kernel still uses the old table.
The new table wilf be used at the next reboot.		#要求重新启动,才能格式化
Syncing disks.

1.4.3 partprobe

partprobe:强制重读所有分区文件,重新挂载分区文件内所有分区。这不是分区必须命令,如果没有提示重启,可以不执行,也可以重启系统

(Warning: Unable to open /dev/hdc read-write (Read-only file system)./dev/hdc hasbeen opened read-only.

光盘只读挂载,不是错误,不用紧张。

如果这个命令不存在请安装parted-2.1-18.el6.i686这个软件包

1.4.4 格式化文件系统

建立文件系统,ext4 是 Linux CentOS 6之后的默认文件系统,CentOS 7之后则采用 xfs 文件系统。

mkfs -t ext4 /dev/sdb1
mkfs -t ext4 /dev/sdb5

mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是4096),这些默认参数除非特殊情况,否则不需要调整,如果想要调整就需要使用 mke2fs 命令进行重新格式化,命令格式如下:

~ mke2fs [选项] 分区设备文件名
选项:
  -t 文件系统	:指定格式化成哪个文件系统,如ext2,ext3,ext4
  -b 字节			:指定block块的大小
  -i 字节			:指定“字节/inode”的比例,也就是多少个字节分配一个inode
  -j					:建立带有ext3日志功能的文件系统
  -L 卷标名		 :给文件系统设置卷标名,就不使用e2label命令设定了
  
#举例:
~ mke2fs -t ext4 -b 2048 /dev/sdb1
#格式化分区,并指定 block 的大小为 2048

###后期的 mkfs 已经支持修改block块的大小
~ mkfs -t ext4 -b 4096 /dev/sdb5

1.4.5 建立挂载点

mkdir -pv /tmp/disk1
mkdir -pv /tmp/disk5

1.4.6 挂载分区

mount /dev/sdb1 /tmp/disk1/
mount /dev/sdb5 /tmp/disk5/

1.4.7 查看文件系统挂载情况

#查看挂载情况
~ df -aTh | grep "/dev/sdb"
/dev/sdb1            ext4         103M   48K   97M   1% /tmp/disk1
/dev/sdb5            ext4         103M   48K   97M   1% /tmp/disk5

~ mount 
#查看所有已经挂载的分区和光盘
~ fdisk -l /dev/sdb
#查看系统分区
~ df
#查看分区占用百分比

1.4.8 自动挂载

修改分区自动挂载文件。移动存储设备(移动硬盘,U盘,光盘)等禁止使用自动挂载。只允许固定的存储硬盘进行自动挂载

vi /etc/fstab
#注意:此文件直接参与系统启动,如果修改错误,系统启动报错
/dev/sdb1 /disk1 ext4 defaults 1 2

#第一列:设备文件名,也可以是设备的UUID号(推荐使用UUID号)
#第二列:挂载点
#第三列:文件系统
#第四列:挂载选项
#第五列:1 是否可以被备份		 0 不备份	1 每天备份		2 不定期备份
#第六列:2 是否检测磁盘 fsck	0 不检测	 1 启动时检测	2 启动后检测

也可以使用UUID进行挂载,UUID(硬盘通用唯一识别码,可以理解为硬盘的ID)

  • 这个字段在CentOS 5.5的系统当中是写入分区的卷标名或分区设备文件名的,现在变成了硬盘的UUID。这样做的好处是当硬盘增加了新的分区,或者分区的顺序改变,再或者内核升级后,任然能够保证分区能够正确的加载,而不至于造成启动障碍
  • 那么每个分区的UUID到底是什么呢?我们讲过的dumpe2fs命令是可以查看到的,命令如下:
~ dumpe2fs /dev/sdb1 | grep -i "UUID"
dumpe2fs 1.41.12 (17-May-2010)
Filesystem UUID:          7a005776-b381-42f0-b39d-562cf883a32b

或者

~ ls -l /dev/disk/by-uuid/ | grep sdb1
lrwxrwxrwx. 1 root root 10 Jul  9 20:59 7a005776-b381-42f0-b39d-562cf883a32b -> ../../sdb1
~ lsblk -f | grep sdb1
├─sdb1                              ext4                          7a005776-b381-42f0-b39d-562cf883a32b   /tmp/disk1
~ blkid | grep sdb1
/dev/sdb1: UUID="7a005776-b381-42f0-b39d-562cf883a32b" TYPE="ext4"

1.4.9 重启测试

或者mount -a 重新挂载所有内容,用它进行测试

~ tail -n 2 /etc/fstab
/dev/sdb1               /tmp/disk1              ext4    defaults        0 0
UUID=9c2cb568-2333-4e1f-b470-38f86346866e /tmp/disk5 ext4    defaults        0 0
mount -a
#返回为空,无报错即可

1.5 /etc/fstab 文件修复

我们重新启动系统吧。苍天啊,大地啊,真的报错了,如图

img

仔细看看,他提示你输入root密码啊,好像还有戏啊,我们输入密码试试,如图

img

啊!我们又看到了系统提示符,赶快把/etc/fstab文件修改回来吧。晕,报错了,如图

img

img

别慌,分析下原因提示是没有写权限,那么只要把/分区重新挂载下,挂载为读写权限不就可以修改了吗?命令如下

mount -o rmeount,rw /

再去修改/etc/fstab文件,把它改回来就可以正常启动了啊。

1.6 parted 命令分区

我们Linux系统中有两种常见的分区表MBR分区表(主引导记录分区表)和GPT分区表(GUID分区表),其中:

  • MBR分区表:支持的最大分区是2TB (1TB=1024GB)﹔最多支持4个主分区,或3个主分区1个扩展分区
  • GPT分区表:支持最大18EB的分区(1EB = 1024PB = 1024*1024TB)﹔最多支持128个分区,其中1个系统保留分区,127个用户自定义分区

不过parted命令也有点小问题,就是命令自身分区的时候只能格式化成 ext2 文件系统,不支持 ext3 文件系统,那就更不用说 ext4 文件系统了(截止到 CentOS 6.8 还是这样,这里只是指不能用parted命令把分区格式化成 ext4 文件系统,但是 parted 命令还是可以识别 ext4 文件系统的)。不过这没有太多的影响,因为我们可以先分区再用 mkfs 进行格式化嘛!

一)parted 交互模式

~ parted /dev/sdb
#打算继续划分 /dev/sdb 硬盘
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) #parted 的等待输入交互式命令的位置
parted 交互命令说明
check做一次简单的文件系统检测
cp [FROM-DEVICE]FROM-NUMBER TO-NUMBER复制文件系统到另外一个分区
help [COMMAND]显示所有的命令帮助
mklabel, mktable LABEL-TYPE创建新的磁盘卷标(分区表)
mkfs NUMBER FS-TYPE在分区上建立文件系统
mkpart PART-TYPE [FS-TYPE] START END创建一个分区
mkpartfs PART-TYPE FS-TYPE START END创建分区,并建立文件系统
move NUMBER START END移动分区
name NUMBER NAME给分区命名
print [devices | freellist, all | NUMBER]显示分区表,活动设备,空闲空间,所有分区
quit退出
rescue START END修复丢失的分区
resize NUMBER START·END修改分区大小
rm NUMBER删除分区
select DEVICE选择需要编辑的设备
set NUMBER FLAG STATE改变分区标记
toggle [NUMBER [FLAG]]切换分区表的状态
unit UNIT设置默认的单位
Version显示版本

二)建立分区

  1. 查看分区
(parted) print
#输入print 指令
Model: VMware, VMware Virtual S (scsi)			#硬盘参数,是虚拟机
Disk /dev/sdb: 215GB												#硬盘大小
Sector size (logical/physical): 512B/512B		#扇区大小
Partition Table: msdos											#分区表类型,就是MBR分区表

Number  Start   End     Size    Type      File system  Flags	#标志
 1      32.3kB  115MB   115MB   primary   
 2      1012MB  8423MB  7411MB  extended
 5      1012MB  1127MB  115MB   logical   ext4
#看到了我们使用fdisk 分的区,其中1分区没有格式化,2分区是扩展分区不能格式化

使用 print 可以查看分区表信息,包括硬盘参数,硬盘大小,扇区大小,分区表类型和分区信息。分区信息总共七列,分别是:

  • Number:分区号
  • Start:分区起始位置,这里不再像fdisk 用柱面表示,而是使用Byte更加直观
  • End:分区结束位置
  • Size:分区大小Type:分区类型
  • File system:文件系统类型。我不是说parted不支持ext4文件系统吗?注意,我一直都是说parted不能直接把分区直接格式化成ext4文件系统,但是它是可以识别的。
  • 标志:Flags,就是分区的标记
  1. 修改成 GPT 分区表
~ parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: Partition(s) on /dev/sdb are being used.	#由于/dev/sdb分区已经挂载,所以有警告
#注意如果强制修改,原有分区以及数据会丢失
Ignore/Cancel? Ignore		#输入 Ignore 忽略报错
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be
lost. Do you want to continue?
Yes/No? yes		#输入 yes
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sdb (Device or resource
busy).  As a result, it may not reflect all of your changes until after reboot.	#下次重启后,才能生效
(parted) print		#查看下分区表
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt	#分区表已经变成GPT

Number  Start  End  Size  File system  Name  Flags #标志
#所有的分区都消失

修改了分区表,如果这块硬盘已经有分区了,那么原有分区和分区中的数据都会消失,而且需要重启系统才会生效。

还有我们转换分区表的目的是为了支持大于TB-的分区,如果分区并没有大于2TB,那么这步是可以不执行的。

注意:一定要把/etc/fstab文件中和原有分区的内容删除掉,才能重启动。要不系统启动就一定会报错的。

  1. 建立分区

因为修改过了分区表,所以 /dev/sdb 中的所有数据都消失了,所以我们可以重新对这块硬盘分区了。不过建立分区时,默认文件系统就只能建立成 ext2 了,命令如下:

~ parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mkpart
#输入创建分区命令,后面不要参数,全部靠交互指定
Partition name?  []? disk1				#分区名称,起名叫disk1
File system type?  [ext2]?				#文件系统类型,直接回车,使用默认 ext2,parted 只支持ext2
Start? 1MB												#分区从 1MB 开始
End? 5MB													#分区到 5MB 结束
#分区完成
(parted) print										#查看分区列表
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name   Flags
 1      1049kB  5243kB  4194kB               disk1		#分区1已经出现
#GPT分区之后是没有主分区和扩展分区之分。

不知道大家注意到了吗?我们现在的print查看的分区,和第一次查看MBR分区表的分区时有些不一样了,少了Type这个字段,也就是分区类型的字段,多了Name分区名字段。分区类型是标识主分区、扩展分区和逻辑分区的,不过这种标识只在MBR分区表中使用,我们现在已经变成了GPT分区表了,所以就不再有Type类型了。也就说折磨我们很久的主分区、扩展分区和逻辑分区的概念不再有用了,阿门!

  1. 建立文件系统

分区分完了,我们还需要格式化。不过我们已经知道如果使用parted交互命令格式化的话,只能格式化成ext2文件系统。我们这里是要演示下parted 命令的格式化方法,所以就格式化成ext2吧,命令如下:

(parted) mkfs
#格式化命令(很奇怪也是 mkfs,但是这只是 parted 的交互命令)
WARNING: you are attempting to use parted to operate on (mkfs) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Warning: The existing file system will be destroyed and all data on the partition
will be lost. Do you want to continue?
Yes/No? yes
#警告你格式化数据会丢失,没关系,数据已经丢失过了
Partition number? 1
#分区编号
File system type?  [ext2]?
#指定文件系统类型,写别的没有用,直接回车
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name   Flags
 1      1049kB  5243kB  4194kB  ext2         disk1				#已经拥有了文件系统

如果要格式化成ext4文件系统,请mkfs命令帮忙吧(注意不是parted交互命令中的mkfs,而是系统命令mkfs) !

mkfs -t ext4 -L "EXT4 File System" /dev/sdb1
mount /dev/sdb1 /tmp/disk1
  1. 调整分区大小

parted命令还有一大优势,就是可以调整分区的大小(windows 中也可以实现,不过要不需要转换成动态磁盘,要不需要依赖第三方工具,如硬盘分区魔术师)。起始Linux中 LVM和RAID是可以支持分区调整的,不过这两种方法也可以看成是动态磁盘方法,我们在下一个章节中介绍。使用parted命令调整分区要更加简单。

注意: parted调整已经挂载使用的分区时,是不会影响分区中的数据的,也就是说数据不会丢失。但是一定要先卸载分区再调整分区大小,否则数据是会出现问题的。还有要调整大小的分区必须已经建立了文件系统(格式化),否则会报错。

命令如下:

~ parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) resize
WARNING: you are attempting to use parted to operate on (resize) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Partition number? 1			#指定要修改的分区编号
Start?  [1049kB]? 1049	#分区起始位置
End?  [5242kB]? 3072		#分区结束位置
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name   Flags	#标志
 1      1049kB  3072kB  3072kB               disk1				#分区大小改变
  1. 删除分区
(parted) rm
#删除分区命令
Partition number? 1			#指定分区号
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sdb
(Device or resource busy).  As a result, it may not reflect all of your changes
until after reboot.
(parted) print					#查看下
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags #标志 #分区消失

还有件事要注意,parted 中所有的操作都是立即生效,没有保存生效的概念。这点和 fdisk 交互。命令明显不同,所以所做的所有操作大家要倍加小心。

那么到底使用 fdisk 进行分区?还是parted命令呢?这个完全看个人习惯,我们更加习惯fdisk命令。

1.7 分配 Swap 分区

1.7.1 创建 Swap 分区

  1. 分区,并修改为 swap 分区ID
~ fdisk /dev/sdb
#新建主分区
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-26108, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-26108, default 26108): +2G

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00023fc5

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

~ fdisk /dev/sdb
Command (m for help): t							#修改分区的系统ID
Selected partition 1								#只有一个分区,所以不用选择分区了
Hex code (type L to list codes): 82	#改为 swap 的ID
Changed system type of partition 1 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00023fc5

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  82  Linux swap / Solaris

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
  1. 格式化
~ mkswap /dev/sdb1
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=c6161e70-caa2-415f-a1fa-4bad94c38d5b
  1. 使用 Swap 分区之前,先来说一下 free 命令,命令如下:
#查看交换分区的空间
~ free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        1.1G        1.3G        204M        1.3G        2.2G
#内存空间			内存大小			内存使用		内存空闲		共享数据	缓冲空间/缓存空间
#缓冲空间:加速硬盘的写入速度,用来提升数据的写入
#缓存空间:加速硬盘的读取速度,用来提升数据的读取
##CPU不会先将数据直接存储到磁盘中,而是先存放到内存的缓冲空间中。当磁盘空闲的时候,再将缓冲的数据写入到磁盘中
##磁盘将数据存放到较为高速的缓存中,由CPU调用缓存中的数据交互。减少磁盘的读取压力。
##缓冲空间和缓存空间的调用都是又内核操作的。系统会自动的按照系统空间和用户空间读取数据和写入数据的需求
##自动调整Buffer 和 Cache的大小。
Swap:          4.0G          0B        4.0G
#交换空间			交换空间大小	交换空间使用	交换空闲
swapon 分区设备文件名

#例子
~ swapon /dev/sdb1
~ free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        1.1G        1.3G        197M        1.3G        2.2G
Swap:          6.0G          0B        6.0G

~ swapon -v
NAME      TYPE      SIZE USED PRIO
/dev/sda5 partition   4G   0B   -2
/dev/sdb1 partition   2G   0B   -3

让 swap 分区开机之后自动挂载

/dev/sdb1 swap swap defaults 0 0
#加入新swap分区的相关内容,这里是直接使用的分区的设备文件名,当然也可以使用UUID号了。

1.7.2 关闭 Swap 分区

~ swapoff -a

~ free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        1.1G        1.3G        205M        1.3G        2.2G
Swap:            0B          0B          0B

运维工程师需要时刻编写文档。在常用的命令中需要能够熟悉掌握,但是在特定的命令比如:fdisk,parted等命令,需要编写文档记录,能够在需要时及时查看解决问题。

二 高级文件系统管理

2.1 磁盘配额

2.1.1 磁盘配额概念

RAID 磁盘陈列,有两种模式:一种是软件RAID,另一种是有专门的硬件磁盘陈列卡进行管理。无论是 Windows系统 还是 Linux系统,软RAID 是没有实际使用价值的。

磁盘配额主要用于限制普通用户(不能限制超级用户)和用户组使用磁盘分区空间的文件个数和文件大小的限制。

2.1.2 磁盘配额文件

  • 内核必须支持磁盘配额
#Linux内核必须支持磁盘配额
~ grep -i config_quota /boot/config-2.6.32-754.el6.x86_64
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=y
CONFIG_QUOTACTL=y
  • 系统中必须安装 quota 工具,我们的 Linux 默认是安装了 quota 工具的,查看命令如下:
~ rpm -qa | grep quota
quota-3.17-23.el6.x86_64

要支持磁盘配额的分区必须开启磁盘配额功能,这个功能需要手工开启,不再是默认就开启的

2.1.3 概念

1)用户配额和组配额(组配额极少使用)

2)磁盘容量(限制数据块数量)限制和文件个数(限制 Inode)限制

3)软限制(警告限制)和硬限制(实际限制)

4)宽限时间

如果用户的空间占用数处于软限制和硬限制之间,统会在用户登陆时警告用户磁盘将满,,这个时间就是宽限时间,默认是7天。如果达到了宽限时间,用户的磁盘占用量还超过软限制,那么软限制就会升级为硬限制。

2.1.4 磁盘配额规划

我们开始磁盘配额实验,首先我们来规划下我们的实验:

  • 磁盘配额是限制的普通用户在分区上使用磁盘空间和文件个数的,所以我们需要指定一个分区。那么我们手工建立一个 5GB的 /dev/sdb1 分区,把它挂载到 /disk 目录当中。

    • SWAP 是交换分区,不是给用户使用,是给内核直接使用。
    • /boot 分区不要进行实验。boot 分区容易导致系统崩溃。
  • 还有我们需要建立被限制的用户和用户组。那么我们假设需要限制 user1、user2和 user3 用户,这三个用户属于test用户组。

    • 组配额在实际生产工作环境中几乎没有办法使用,用户所使用的空间是抢占式(先到先得),并不是平均分配给用户。
  • 其中test组磁盘容量硬限制为 500 MB,软限制 450 MB,文件个数不做限制。user1 用户为了便于测试,磁盘容量硬限制为 50 MB,软限制为 40 MB,文件个数硬限制限制为 10 个,软限制为 8 个。user2 和user3 用户磁盘容量硬限制为 250 MB,软限制为 200 MB,文件个数不做限制。

  • 大家发现user1、user2和user3用户加起来的磁盘容量限制为550MB,超过了test组的磁盘容量限制500MB。这样的话,某个用户可能达不到自己的用户限制,而达到组限制时就不能再写入数据了。也就是说,如果用户限制和组限制同时存在,那么哪个限制更小,哪个限制优先生效。

  • 系统宽限时间我们改为8天。(默认系统宽限时间是7天)

2.1.5 磁盘配额步骤

1)分 5GB 的/dev/sdb1 分区,并将它挂载到 /disk 目录中

#CentOS 6系统
~ mkdir -pv /disk
~ echo -e "n\np\n1\n\n+5G\np\nw\n" | fdisk /dev/sdb

~ lsblk /dev/sdb
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  200G  0 disk
└─sdb1   8:17   0    5G  0 part
#格式化文件系统
~ mkfs -t ext4 -L "EXT4 File System" /dev/sdb1
#挂载文件系统
~ mount /dev/sdb1 /disk
~ df -Th /dev/sdb1
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sdb1      ext4  4.9G   11M  4.6G   1% /disk

2)建立需要做限制的用户和用户组

groupadd test
for i in {1..3};do useradd -G test user$i;echo "123456" | passwd --stdin user$i;done

#需要测试用户对/disk拥有写的权限
chmod 777 /disk
#可以使用ACL进行用户的权限划分
setfacl -m u:user1:rwx /disk
setfacl -m u:user2:rwx /disk
setfacl -m u:user3:rwx /disk
setfacl -m g:test:rwx /disk

3)在分区上开启磁盘配额功能

~ mount -o remount,usrquota,grpquota /disk
#重新挂载/disk分区,并加入用户和用户组的磁盘配额功能
#usrquota 开启用户的磁盘配额功能
#grpquota 开启用户组的磁盘配额功能

~ mount | grep /disk
/dev/sdb1 on /disk type ext4 (rw,relatime,quota,usrquota,grpquota,data=ordered)

我们要想永久生效,则需要修改 /etc/fstab 文件,改成:

cat >> /etc/fstab <<EOF
/dev/sdb1 /disk ext4 defaults,usrquota,grpquota 0 0
EOF
...省略部分输出...

mount -o remount /disk
#修改配置文件如果想要生效,必须重启系统,否则也需要吧分区重新挂载一遍

4)建立磁盘配额的配置文件

~ quotacheck [选项] [分区名]
选项:
  -a:扫描/etc/mtab文件中所有启用磁盘配额功能的分区。如果加入此参数,命令后面就不需要加入分区名了
  -c:不管原有的配置文件,重新扫描并建立新的配置文件
  -u:建立用户配额的配置文件,也就是生成aquota.user文件
  -g:建立组配额的配置文件,会生成aquota. group文件
  -v:显示扫描过程
  -m:强制以读写的方式扫描文件系统,和-M类似。一般扫描根分区时使用。
  -f:强制扫描文件系统,并写入新的配置文件。一般扫描新添加的硬盘分区时使用
quotacheck -avug

#查看生成配置文件
~ ls -l /disk/
total 32
-rw------- 1 root root  6144 Aug 16 21:27 aquota.group
-rw------- 1 root root  6144 Aug 16 21:27 aquota.user
#/disk 目录中两个配额配置文件已经建立

需要关闭SELinux,否则会报错(权限拒绝)。

img

#临时关闭SELinux
setenforce 0
#永久关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#查询SELinux的状态
getenforce

如果需要给根分区开启配额功能,需要强制开启配额功能

~ vi /etc/fstab 
UUID=59f3e0ac-addf-4dd9-bb00-a3e9b708094b /          ext4     defaults,usrquota,grpquota        0 0
#开启 / 分区的配额功能

mount -o remount /
#重新挂载/分区

quotacheck -avugm

如果我们自动扫描/分区建立配额配置文件时,因为 / 分区已经挂载成读写系统,而quotacheck需要把分区先挂载成只读分区,然后建立配置文件,最后再挂载回来,所以不能直接在/分区建立配置文件。这时就需要使用 -m 强制以读写方式扫描文件系统了。(原因:根分区是系统分区,正在被系统使用,需要使用-m强制进行配额)

5)设置用户和组的配额限制

~ edquota [选项] [用户名或者组名]
选项:
  -u 用户名:设定用户配额
  -g组名:设定组配额
  -t:设定宽限时间
  -p:复制配额限制。如果已经设定好某个用户的配额限制,其他用户的配额限制如果和这个用户相同,
     那么可以直接复制配额限制,而不用都手工指定
#命令操作的就是aquota.user和aquota.group的文件

我们给user1用户设定的配额限制是:磁盘空间软限制是40MB,硬限制是50MB;文件个数的软限制是8个,硬限制是10个(稍微小一点,一会测试时方便测试)。命令如下:

~ edquota -u user1
#edquota命令进入之后,就是标准的vi操作方法
Disk quotas for user user1 (uid 501):
#磁盘配额是设定用户user1(UID是501)
Filesystem                   blocks       soft       hard     inodes     soft     hard
/dev/sdb1                         0          0          0          0        0        0
#分区名								    已占用容量	文件大小软限制	文件大小硬限制	已占用文件数	文件个数软限制	 文件个数硬限制
#											blocks可以理解为文件大小的限制;inodes可以理解为文件索引的限制,通俗理解就是文件个数的限制
#文件大小的限制默认单位是KB
#blocks和inodes下的数值不要进行修改。
Disk quotas for user user1 (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0      40000      50000          0        8       11
  #不用对齐,是七列就行。保存并退出

再给user2用户配置限额,user2用户要求是空间软限制250MB,硬限制250MB,文件个数不做限制:

~ edquota -u user2
Disk quotas for user user2 (uid 1002):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0     250000     300000          0        0        0

接下来给 test 组配置限额,test组要求是空间软限制是450MB,硬限制500MB,文件个数不做限制:

~ edquota -g test
Disk quotas for group test (gid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0     450000     500000          0        0        0

6)配额复制

user3用户的配额值和user2用户完全一样,我们就可以使用user2用户作为模板进行复制。这样我们如果需要建立大量的配额值一致的用户时,就会非常方便,不用一个个手工建立了。复制命令如下:

~ edquota -p user2 -u ser3
#命令 -p 源用户 -u 目标用户

范例:

~ edquota -p user1 -u user3
~ quota -vus user1
Disk quotas for user user1 (uid 501):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   40000   50000              11*      8      11   7days
~ quota -vus user3
Disk quotas for user user3 (uid 503):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   40000   50000               0       8      11

7)修改宽限时间

~ edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/sdb1                     8days                  8days
#分区名                   文件容量的宽限时间       文件个数的宽限时间

8)启动和关闭配额

配额的配置完成,接下来只需要启动配额就大功告成了,启动命令如下:

~ quotaon [选项] [分区名]
选项:
  -a:依据/etc/mtab文件启动所有的配额分区。如果不加-a,后面就一定要指定分区名
  -u:启动用户配额
  -g:启动组配额
  -v:显示启动过程的信息

~ quotaon -vug /disk/
/dev/sdb1 [/disk]: group quotas turned on
/dev/sdb1 [/disk]: user quotas turned on
#启动 /disk 分区的配额

~ quotaon -avug
#该命令也可以使用

关闭配额的命令如下:

~ quotaoff [选项] [分区名]
选项
-a:依据/etc/mtab文件关闭所有的配额分区。如果不加-a,后面就一定要指定分区名
-u:关闭用户配额
-g:关闭组配额

~ quotaoff -a 
#依据/etc/mtab文件关闭配额分区

2.1.6 磁盘配额查询

quota查询用户或用户组配额:

~ quota [选项] [用户名]
选项:
  -u 用户名 :查询用户配额
  -g 组名 :查询组配额
  -v      :显示详细信息
  -s      :以习惯单位显示容量大小,如M,G

~ quota -uvs user1

范例:

~ quota -uvs user1
Disk quotas for user user1 (uid 501):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   40000   50000               0       8      11

repquota查询文件系统配额:

~ repquota [选项] [分区名]
选项:
  -a:依据/etc/mtab文件查询配额。如果不加-a选项,就一定要加分区名
  -u:查询用户配额
  -g:查询组配额
  -v:显示详细信息
  -s:以习惯单位显示容量大小

~ repquota -auvgs

范例:

~ repquota -auvgs
*** Report for user quotas on device /dev/sdb1
Block grace time: 8days; Inode grace time: 8days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      20       0       0              2     0     0
user1     --       0   40000   50000              0     8    11
user2     --       0    245M    293M              0     0     0

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 3
Used average: 3.000000

*** Report for group quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
Group           used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      20       0       0              2     0     0

Statistics:
Total blocks: 6
Data blocks: 1
Entries: 1
Used average: 1.000000

2.1.7 测试

#切换成user1用户
~ su - user1

#user1的磁盘配额文件容量大小为50MB
$ dd if=/dev/zero of=/disk/testfile bs=1M count=60
#建立testfile文件,指定大小60MB

范例:

~ dd if=/dev/zero of=/disk/testfile bs=1M count=60
sdb1: warning, user block quota exceeded.
sdb1: write failed, user block limit reached.
dd: writing `/disk/testfile':' Disk quota exceeded
49+0 records in
48+0 records out
51200000 bytes (51 MB) copied, 0.195043 s, 263 MB/s

~ $ls -lh /disk/testfile
-rw-rw-r--. 1 user1 user1 49M Aug 17 10:30 /disk/testfile
#将/disk/testfile文件删除,创建8个文件个数
$ rm -rf /disk/testfile
$ touch /disk/user1-{1..8}.txt
#再创建第9个文件时
$ touch user1-9.txt
sdb1: warning, user file quota exceeded.
#再创建到第11个文件时
$ touch /disk/user1-{10..11}.txt
$ touch /disk/user1-12.txt
sdb1: write failed, user file limit reached.
touch: cannot touch `/disk/user1-12.txt': Disk quota exceeded

2.1.8 非交互式设定用户磁盘配额

~ setquota -u 用户名 容量软限制 容量硬限制 个数软限制 个数硬限制 分区名

#例子:
~ useradd user4
~ echo "123456" | passwd --stdin user4
#建立用户
~ setquota -u user4 10000 20000 5 8 /disk
#指定用户在/disk分区的容量软限制10000,硬限制20000,个数软限制5个,个数硬限制8个

范例:非交互式设定用户磁盘配额

~ setquota -u user4 10000 20000 8 10 /disk
~ quota -svu user4
Disk quotas for user user4 (uid 504):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   10000   20000               0       8      10

这个命令在写脚本批量设置时更加方便。当然写脚本时也可以先建立一个模板的用户,设定好磁盘配额,再进行配额复制,也是可以的。

磁盘配额的命令没有必要一定要背下来,这些就只针对磁盘配额的生效,离开磁盘配额的操作,就不能进行使用。

Shell 程序是比较简单的,但是Shell 编程主要考验人员对Linux系统的熟悉程度。而不是编程的熟悉。

2.2 LVM 逻辑卷管理

2.2.1 LVM简介

LVM是Logical Volume Manager的简称,中文就是逻辑卷管理。

img

标准的分区方法是不支持分区扩容缩容的。LVM 就是为了打破标准分区的限制,实现分区的动态扩展。

不管是Linux系统和Windows系统,理论上都是不支持分区大小的调整。网上的分区工具是强制刷新分区表实现分区调整。

  • 物理卷(PV,Physical Volume):就是真正的物理硬盘或分区。(将普通分区升级变成物理卷,可以来自同一块硬盘也可以是不同的硬盘)
  • 卷组(VG,Volume Group):将多个物理卷合起来就组成了卷组,组成同一个卷组的物理卷可以是同一个硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一个逻辑硬盘。(卷组是允许动态扩缩容的)
  • 逻辑卷(LV,Logical Volume):卷组是一个逻辑硬盘,硬盘必须分区之后才能使用,这个分区我们称作逻辑卷。逻辑卷可以格式化和写入数据。我们可以把逻辑卷想象成为分区。(只要卷组有剩余空间,就可以实现逻辑卷的动态扩缩容)
  • 物理扩展(PE,Physical Extend) :PE是用来保存数据的最小单元,我们的数据实际上都是写入PE当中,PE的大小是可以配置的,默认是4MB。

虽然LVM是支持缩容的,但是建议不要使用缩容的操作,会容易造成数据的丢失。

普通分区是柱面作为最小单位,而逻辑卷则是以PE物理扩展作为最小单位。PE还会格式成底层的Block数据块,Block 是存储单位的最小单位。

2.2.2 建立LVM的步骤;

  • 首先需要把物理硬盘分成分区+当然也可以是整块物理硬盘。
  • 然后把物理分区建立成为物理卷(PV),也可以直接把整块硬盘都建立为物理卷。
  • 接下来把物理卷整合成为卷组(VG)。卷组就已经可以动态的调整大小了,可以把物理分区加入卷组,也可以把物理分区从卷组中删除。
  • 最后就是把卷组再划分成为逻辑卷(LV),当然逻辑卷也是可以直接调整大小的。我们说逻辑卷可以想象成为分区,所以也需要格式化和挂载。

2.2.3 物理卷管理

1)硬盘分区

创建方式就是使用fdisk交互命令,不过需要注意的是分区的系统ID不再是Linux默认的分区ID号83了,而要改成LVM的 ID 号8e。

~ fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6ac5c26b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         654     5253223+  83  Linux
/dev/sdb2             655         916     2104515   82  Linux swap / Solaris

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 3
First cylinder (917-26108, default 917):
Using default value 917
Last cylinder, +cylinders or +size{K,M,G} (917-26108, default 26108):
Using default value 26108

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6ac5c26b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         654     5253223+  83  Linux
/dev/sdb2             655         916     2104515   82  Linux swap / Solaris
/dev/sdb3             917       26108   202354740    5  Extended

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (917-26108, default 917):
Using default value 917
Last cylinder, +cylinders or +size{K,M,G} (917-26108, default 26108): +2G

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (1179-26108, default 1179):
Using default value 1179
Last cylinder, +cylinders or +size{K,M,G} (1179-26108, default 26108): +2G

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (1441-26108, default 1441):
Using default value 1441
Last cylinder, +cylinders or +size{K,M,G} (1441-26108, default 26108): +2G

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6ac5c26b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         654     5253223+  83  Linux
/dev/sdb2             655         916     2104515   82  Linux swap / Solaris
/dev/sdb3             917       26108   202354740    5  Extended
/dev/sdb5             917        1178     2104483+  83  Linux
/dev/sdb6            1179        1440     2104483+  83  Linux
/dev/sdb7            1441        1702     2104483+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

#修改成8e的文件类型
echo -e "t\n5\n8e\nw\n" | fdisk /dev/sdb
echo -e "t\n6\n8e\nw\n" | fdisk /dev/sdb
echo -e "t\n7\n8e\nw\n" | fdisk /dev/sdb

#重启系统即可
sync ; shutdown -r now

2)建立物理卷

pvcreate [设备文件名]

建立物理卷时,我们说即可以把整块硬盘都建立成物理卷,也可以把某个分区建立成物理卷。如果要把整块硬盘都建立成物理卷,命令如下

pvcreate /dev/sdb

在我们的使用中,是要把分区建立成为物理卷,所以执行以下命令:

pvcreate /dev/sdb5

范例:

~ pvcreate /dev/sdb5 /dev/sdb6 /dev/sdb7
  Physical volume "/dev/sdb5" successfully created
  Physical volume "/dev/sdb6" successfully created
  Physical volume "/dev/sdb7" successfully created

3)查看物理卷

~ pvscan
  PV /dev/sdb5                         lvm2 [2.01 GiB]
  PV /dev/sdb6                         lvm2 [2.01 GiB]
  PV /dev/sdb7                         lvm2 [2.01 GiB]
  Total: 4 [6.03 GiB] / in use: 0 [0 ] / in no VG: 3 [6.03 GiB]

我们可以看到在我的系统中,/dev/sdb5-7这三个分区是物理卷。最后一行的意思是:总共3个物理卷[大小]/使用了0个卷[大小]/空闲3个卷[大小]。

第二个查询命令是 pvdisplay,它可以查看到更详细的物理卷状态,命令如下:

~ pvdisplay
~ pvdisplay /dev/sdb5
  "/dev/sdb5" is a new physical volume of "2.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb5                               #PV名
  VG Name                                                       #属于的VG名,还没有分配,所以是空白
  PV Size               2.01 GiB                                #PV的大小
  Allocatable           NO                                      #是否已经分配
  PE Size               0                                       #PE的大小,因为还没有分配,所以PE的大小也没有指定
  Total PE              0                                       #PE总数
  Free PE               0                                       #空闲PE数
  Allocated PE          0                                       #可分配的PE数
  PV UUID               2MFvh6-UuUX-sPOT-m3d1-AUkh-NYqC-PgpJyo  #PV的UUID

4)删除物理卷

pvremove /dev/sdb7

2.2.4 卷组管理

1)建立卷组

vgcreate [选项] 眷组名 物理卷名
#选项
-s PE大小:指定PE的大小,单位可以是MB,GB,TB等。如果不写默认PE大小是4MB

我们又三个物理卷/ dev/sdb5-7,我们先把/dev/sdb5和/dev/sdb6加入卷组,留着/ dev/sdb7一会实验调整卷组大小,命令如下:

~ vgcreate -s 8MB scvg /dev/sdb5 /dev/sdb6
  Volume group "scvg" successfully created

2)查看卷组

查看卷组的命令同样是两个,vgscan主要是查看系统中是否有卷组,而vgdisplay则是查看卷组的详细状态的。命令如下:

~ vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "scvg" using metadata type lvm2
#scvg 的卷组确实存在

#查看vg的详细信息显示
~ vgdisplay scvg
  --- Volume group ---
  VG Name               scvg #卷组名
  System ID
  Format                lvm2
  Metadata Areas        2
  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                2          #当前物理卷数
  Act PV                2
  VG Size               4.00 GiB   #卷组的大小
  PE Size               8.00 MiB   #PE的大小
  Total PE              512        #PE的总数
  Alloc PE / Size       0 / 0      #已用的PE数量/大小
  Free  PE / Size       512 / 4.00 GiB  #空闲的PE数量/大小
  VG UUID               N3SMHu-CfYP-i3lM-jWxG-C83o-AWtA-Y2GXqo

3)增加卷组容量

~ vgextend scvg /dev/sdb7
  Volume group "scvg" successfully extended
#把/dev/sdb7物理卷也加入到scvg卷组中

~ vgdisplay scvg
  --- Volume group ---
  VG Name               scvg
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               6.00 GiB       #卷组容量增加
  PE Size               8.00 MiB       
  Total PE              768            #PE总数增加
  Alloc PE / Size       0 / 0
  Free  PE / Size       768 / 6.00 GiB
  VG UUID               N3SMHu-CfYP-i3lM-jWxG-C83o-AWtA-Y2GXqo

4)减少卷组容量

~ vgreduce scvg /dev/sdb7
  Removed "/dev/sdb7" from volume group "scvg"

#删除所有未使用的物理卷
~ vgreduce -a
#理论是可以缩减,但是不要缩减

5)删除卷组

~ vgremove scvg

卷组删除之后,才能删除删除物理卷。还要注意的是scvg卷组还没有添加任何的逻辑卷,那如果拥有了逻辑卷,记得先删除逻辑卷再删除卷组。还记得我刚说的吗?删除就是安装的反过程,每一步都不能跳过。

2.2.5 逻辑卷管理

1)建立逻辑卷

lvcreate [选项] [-n 逻辑卷名] 卷组名
#选项:
  -L容量 :指定逻辑卷大小,单位MB,GB,TB等
  -l个数 :按照PE个数指定逻辑卷大小,这个参数需要换算容量,太麻烦
  -n逻辑卷名:指定逻辑卷名

那我们就建立一个1.5GB的 userlv 逻辑卷吧,建立命令如下:

~ lvcreate -L 1.5G -n userlv scvg
  Logical volume "userlv" created.
#在scvg卷组中建立1.5GB的userlv逻辑卷

建立完逻辑卷之后,还要格式化和挂载之后逻辑卷才能正常使用。格式化和挂载命令和操作普通分区时是一样的,不过需要注意的是逻辑卷的设备文件名是/dev/卷组名/逻辑卷名,如我们的 userlv 的设备文件名就是“/dev/scvg/userlv”,具体命令如下:

~ mkfs -t ext4 /dev/scvg/userlv
#格式化文件系统

~ mkdir -pv /disklvm
~ mount /dev/scvg/userlv /disklvm
#建立挂载点,并挂载

#查看分区情况
~ df -Th /dev/scvg/userlv
Filesystem              Type  Size  Used Avail Use% Mounted on
/dev/mapper/scvg-userlv ext4  1.5G  2.3M  1.4G   1% /disklvm

~ mount | grep /disklvm
/dev/mapper/scvg-userlv on /disklvm type ext4 (rw)
#已经挂载成功

当然如果需要开机自动挂载,也要修改/etc/fstab文件。

2)查看逻辑卷

同样的查看命令是两个,第一个命令lvscan只能看到系统中是否拥有逻辑卷,命令如下:

~ lvscan
  ACTIVE            '/dev/scvg/userlv' [1.50 GiB] inherit
#能够看到激活的逻辑卷,大小是1.5GB

第二个命令是lvdisplay 可以看到逻辑卷的详细信息,命令如下:

~ lvdisplay /dev/scvg/userlv
  --- Logical volume ---
  LV Path                /dev/scvg/userlv       #逻辑卷设备文件名
  LV Name                userlv                 #逻辑卷名
  VG Name                scvg                   #所谓的眷族名
  LV UUID                9LVn6v-1FiU-rF14-YPFv-fwpa-AEop-WEdym0
  LV Write Access        read/write
  LV Creation host, time centos6server, 2022-08-17 13:02:36 +0800
  LV Status              available
  # open                 1
  LV Size                1.50 GiB               #逻辑卷大小
  Current LE             192
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3

3)调整逻辑卷大小

lvresize [选项] 逻辑卷设备文件名
选项:
  -L 容量:安装容量调整大小,单位KB,GB,TB等。使用+代表增加空间,-号代表减少空间。如果直接写容量,代表设定逻辑卷大小为指定大小。
  -l 个数:按照PE个数调整逻辑卷大小

我们先在/disklvm中建立点文件,一会调整完大小我们看看数据是否会丢失:

~ cd /disklvm
~ touch testf ; mkdir testd
~ ls
lost+found  testd  testf

我们刚刚的userlv的大小事1.5GB,我们的scvg 中还有 4.5GB 的空闲空间,那么增加我们的userlv逻辑卷的大小到2.5GB吧:

~ lvresize -L 2.5 /dev/scvg/userlv
#增加userlv 逻辑卷的大小到2.5GB
#当然命令也可以这样写
~ lvresize -L +1G /dev/scvg/userlv
  Size of logical volume scvg/userlv changed from 1.50 GiB (192 extents) to 2.50 GiB (320 extents).
  Logical volume userlv successfully resized.

~ lvdisplay /dev/scvg/userlv
  --- Logical volume ---
  LV Path                /dev/scvg/userlv
  LV Name                userlv
  VG Name                scvg
  LV UUID                9LVn6v-1FiU-rF14-YPFv-fwpa-AEop-WEdym0
  LV Write Access        read/write
  LV Creation host, time centos6server, 2022-08-17 13:02:36 +0800
  LV Status              available
  # open                 1
  LV Size                2.50 GiB   #大小发生改变了
  Current LE             320
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3

逻辑卷的大小已经改变了,但是好像有些问题啊:

~ df -Th /disklvm/
Filesystem              Type  Size  Used Avail Use% Mounted on
/dev/mapper/scvg-userlv ext4  1.5G  2.3M  1.4G   1% /disklvm

怎么/disklvm分区的大小还是1.5GB啊?刚刚只是逻辑卷的大小改变了,如果需要让分区使用这个新逻辑卷,我们还要使用resize2fs命令来调整分区的大小。不过这里就体现了LVM的优势,我们不需要卸载分区,直接就能调整分区的大小。resize2fs命令如下:

[root@localhost ~]# resize2fs [选项] [设备文件名] [调整的大小]
选项:
  -f        :强制调整
  设备文件名 :指定调整哪个分区的大小
  调整的大小 :指定把分区调整到多大,要加M,G等单位。如果不加大小,会使用整个分区

那么我们已经把逻辑卷调整到了2.5GB,这时我们就需要把整个逻辑卷都加入/disklvm分区,命令如下:

~ resize2fs /dev/scvg/userlv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/scvg/userlv is mounted on /disklvm; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/scvg/userlv to 655360 (4k) blocks.
The filesystem on /dev/scvg/userlv is now 655360 blocks long.

~ df -Th /disklvm/
Filesystem              Type  Size  Used Avail Use% Mounted on
/dev/mapper/scvg-userlv ext4  2.5G  2.3M  2.4G   1% /disklvm

#分区大小已经是2.5GB了
~ ls /disklvm/
lost+found  testd  testf

LVM逻辑卷的使用就是为了动态扩容,缩容在生产环境中不会使用。尽量不要使用标准分区。

2.3 使用图形化界面配置LVM

从在虚拟机中安装Linux系统开始,我们来演示一下LVM逻辑卷分区。

之前选择的分区类型是自定义分区,然后进入手动分区的配置页面。而自定义分区前面的分区选项,无论你选择哪个分区类型,都属于系统自动分区。

例如选择使用所有空间,点击下一步,如下图:

img

通过上图可以看出,系统自动分配的磁盘划分,比我们自己定义的磁盘划分要复杂。你还可以看出,系统自动分配的分区有两个,一个是boot 分区sda1 ,另一个就是LVM分区sda2。

也就是说安装Linux系统时,如果你不自定义手工分区,默认都是用LVM进行分区。在生产服务器上至少要采用LVM分区,因为标准分区是不支持分区大小调整的。实践一下自定义手动创建LVM分区。

2.3.1 选择自定义分区

选择创建自定义布局,点击下一步。

img

2.3.2 分配boot分区

在Linux系统分区中,有一个强制需要创建的分区,就是boot分区。boot 分区很特殊,用于Linux系统启动,而boot 分区只能放在普通标准分区上,不能放在LVM分区中。如果把,boot分区放在LVM分区中,系统将无法启动。(这个和Linux系统的启动管理有关系,强制记住就可以了。)

1)点击创建 -> 标准分区 -> 创建

img

2)选择挂载点,系统文件类型,分区大小,然后点击确定

img

3)boot分区创建完成,如下图所示:

img

2.3.3 创建LVM逻辑卷

1)点击创建 -> LVM物理卷 -> 创建

img

2)分配物理卷的大小。

进入到下一个页面,就是分配物理卷的大小。物理卷是不需要挂载的,也不能存储数据,自己填写物理卷的名称和大小就可以。

img

3)可以看到硬盘剩下的全部空间变成了物理卷PV

img

2.3.4 卷组

1)选中sda2物理卷,点击创建—>LVM卷组—>创建。

img

2)自定义卷组的名称

在下一个页面中,自定义卷组的名称,选中所需的物理卷,如果有多个物理卷,就按需勾选添加到卷组。

点击确定。

img

3)卷组建立完成,如下图:

img

2.3.5 创建逻辑卷

1)选中卷组中的空闲空间,点击创建—>逻辑卷—>创建。

img

如果有多个卷组,在LVM逻辑卷后就可以上下选择卷组。

2)创建逻辑卷。

下一个页面中,创建逻辑卷,逻辑卷就相当于分区,所以先创建swap分区。

img

其实这个页面中的小窗口,点击右边的添加就可以弹出这个小窗口了,可以继续创建逻辑卷,不用退出。

3)点击确定,swap分区创建完成。

img

4)同理创建 home 分区和跟分区

img

2.3.6 格式化安装

点击下一步就可以格式化安装了。

img

这样就完或通过图形化界面进行LVM逻辑卷分区了。

图形化使用LVM逻辑卷,主要是在安装系统的使用,系统安装完毕后还是会要使用LVM的命令进行操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dark_Ice_

你的支持是我创作的核动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值