05 文件管理和存储管理

05 文件管理和存储管理

1 文件编辑命令

1.1 sed命令

#第一种写法
#sed 选项 '范围 动作'   数据来源
#第二种写法
#数据来源 | sed 选项 '范围 动作'
#数据选项方面参数如下
i								#插入新内容到文件
a								#追加新内容到文件
d								#从文件中删除内容
#示例如下:
sed -n '5p' passwd				#将第5行的数据打印出来(缓存中的数据)
sed -i '3,6d' passwd			#将第3行到第6行的数据删除并打印出来(写入文件)
sed -i '/nologin/d' passwd		#将文件中含有nologin的行删除(写入文件)
sed -i '2a\++++' passwd			#在文件中的第2行添加++++内容
sed -i '2,5a\append-3' passwd	#在2、3、4、5每一行添加append-3,其中‘\’符号用来明确要插入的内容,不属于特定标准
#替换内容标准格式为sed -i 's/原内容/新内容'
#当【原内容】或者【新内容】中出现'/'输入需求的时候,可以考虑使用【!】【@】【#】等符号来代替原先的'/'符号
sed -i 's/sed/SED/g' sed.txt	#将sed.txt文件中所有的sed更改为SED
sed -n '3p;5p' passwd			#将第3行和第5行打印出来(缓存中的数据)

1.2 awk编程语言-了解

1.2.1 基础语法

#默认按照空格来对文件内容进行切割
#最核心的动作
#awk '范围{print $列}' 数据源
awk 'NR==2{print $1}' passwd		#打印第一列的第二行
#NR==2本质上是个条件表达式,判断成功再去执行后面的动作
awk '{print $NF}' passwd			#打印最后一列
awk '{print $(NF-1)}' passwd		#打印倒数第二列
awk '{print $1,$3}' passwd			#打印第一列和第三列
awk '{print $1""$3}' passwd			#将第一列和第三列直接拼接。(若需要加入字符,请在""中加入相应的字符即可)
#指定分隔符的两种方式
#-F '列分隔符'
#-v FS='列分隔符'

#$0表示整行
#$1表示第一列
#$2表示第二列
#以此类推

1.2.2 awk对于文件处理的动作

前置性动作		'范围{print $列}'	收尾性动作
BEGIN{}			{}					END{}

#示例如下:
awk BEGIN{FS=":"}{print$2}END{print "OK"} passwd			#高度定制化的操作

1.3 批量重命名

find xx.xx | xargs rename "XX" "YY"					#查找对应的文件,并将文件由XX改名为YY,进行批量改名【XX替换为YY】

2 正则表达式

2.1 基础知识

REGEXP,全称Regular Expressions。Linux相关程序(比如sed、awk、grep等)在输入数据的时候,使用正则表达式对数据内容进行匹配,将匹配成功的信息返回给我们。正则表达式被非常多的程序和开发语言支持。

特性 基本正则表达式(BRE) 扩展正则表达式(ERE)
元字符是否需要转义 +​、​、 ​、()​、{}需要用``转义才能作为元字符使用
支持的功能 功能较少,语法更严格 功能更丰富,语法更灵活
常用工具支持 grep(默认)、sed(默认) grep -E、sed -r/-E、awk、egrep

2.2 通配符和正则-了解

.:匹配任意字符
*:匹配任意内容
?:匹配任意一个内容
[]:匹配中括号中的一个字符
字符匹配
锚定匹配
分组符号-了解
. 匹配任意单个字符 ^ 行首锚定 第一个()里的内容 \1代替
[] 匹配指定范围内的任意单个字符 $ 行尾锚定 第二个()里的内容 \2代替
示例:[shuji]、[0-9]、[a-z] ^PATTERN$ 用于模式匹配整行 第三个()里的内容 \3代替
[^] 匹配指定范围外的任意单个字符 ^$ 空行 第四个()里的内容 \4代替
示例:[^shuji] [1]*$ 空白行 以此类推
| 匹配管道符左侧或者右侧的内容 \< 词首锚定,用于单词模式的左侧
\> 词尾锚定,用于单词模式的右侧
\<PATTERN\> 匹配整个单词【单词由字母,数字,下划线组成】
#进阶展示
#限定符号

常见符号
	*				匹配前面的字符任意次,包括0次
	.*				任意长度的任意字符
	?				匹配其前面的字符出现0次或1次,即:可有可无
	+				匹配其前面的字符出现最少1次,即:肯定有且>=1次
	{m}				匹配前面的字符m次
	{m,n}			匹配前面的字符至少m次,至多n次
	{,n}			匹配前面的字符至多n次,<=n
	{n,}			匹配前面的字符至少n次
egrep "^ab*c$" file.txt					#以a开头b出现0次至无数次c结尾的数据行
egrep "^ab?c$" file.txt					#以a开头b出现1次c结尾的数据行
egrep "^ab+" file.txt					#以a开头b出现至少1次的数据行
egrep "^ab{2,4}" file.txt				#以a开头b出现2~4次的数据行
egrep "^ab{2,}" file.txt				#以a开头b出现至少2次的数据行
egrep "^ab{,2}" file.txt				#以a开头b出现至多2次的数据行

正则表达式的作用:只要能获取内容即可。

生产中的常见的正则表达式都是复制的,因为有一个标准的且具体的被大家承认的格式

3 存储管理

3.1 常规存储知识(看过视频后省略)

3.2 常规存储相关命令

3.2.1 文件系统查看工具df

#基本上用到最多的参数就是hT
[test@localhost ~]$ df -hT
文件系统            类型      容量  已用  可用 已用% 挂载点
devtmpfs            devtmpfs  888M     0  888M    0% /dev
tmpfs               tmpfs     907M     0  907M    0% /dev/shm
tmpfs               tmpfs     907M   17M  890M    2% /run
tmpfs               tmpfs     907M     0  907M    0% /sys/fs/cgroup
/dev/mapper/rl-root xfs        37G  2.4G   35G    7% /
/dev/sda1           xfs      1014M  188M  827M   19% /boot
tmpfs               tmpfs     182M     0  182M    0% /run/user/1000

3.2.2 文件系统目录信息统计工具du

#查看具体某一目录的相关大小
[test@localhost ~]$ sudo du -s /etc 
[sudo] test 的密码:
24308   /etc
[test@localhost ~]$ sudo du -sh /etc 
24M     /etc

#查看目录并且对其进行排序
[test@localhost ~]$ sudo du -sh /etc/* | sort
0       /etc/alternatives
0       /etc/binfmt.d
0       /etc/centos-release
0       /etc/chkconfig.d
0       /etc/cifs-utils
0       /etc/cockpit
0       /etc/cron.deny
0       /etc/cron.monthly
0       /etc/cron.weekly
0       /etc/crypttab
0       /etc/dracut.conf.d
0       /etc/environment
0       /etc/exports
0       /etc/favicon.png
0       /etc/fonts
0       /etc/gnupg
0       /etc/grub2.cfg
0       /etc/gss
0       /etc/init.d
0       /etc/issue.d
0       /etc/kdump
0       /etc/kernel
0       /etc/localtime
0       /etc/microcode_ctl
0       /etc/modules-load.d
0       /etc/motd
0       /etc/motd.d
0       /etc/mtab
0       /etc/opt
0       /etc/os-release
0       /etc/pkcs11
0       /etc/pm
0       /etc/popt.d
0       /etc/rc0.d
0       /etc/rc1.d
0       /etc/rc2.d
0       /etc/rc3.d
0       /etc/rc4.d
0       /etc/rc5.d
0       /etc/rc6.d
0       /etc/rc.local
0       /etc/redhat-release
0       /etc/sasl2
0       /etc/ssl
0       /etc/sssd
0       /etc/subgid-
0       /etc/subuid-
0       /etc/sudoers.d
0       /etc/sysctl.d
0       /etc/system-release
0       /etc/terminfo
0       /etc/tmpfiles.d
0       /etc/xdg
0       /etc/xinetd.d
0       /etc/yum
0       /etc/yum.conf
108K    /etc/pam.d
11M     /etc/udev
12K     /etc/crypto-policies
12K     /etc/kdump.conf
12K     /etc/nanorc
12K     /etc/NetworkManager
12K     /etc/skel
156K    /etc/lvm
16K     /etc/firewalld
16K     /etc/ld.so.cache
16K     /etc/smartmontools
16K     /etc/tuned
20K     /etc/audit
20K     /etc/mcelog
20K     /etc/samba
24K     /etc/dbus-1
28K     /etc/rc.d
32K     /etc/systemd
36K     /etc/iproute2
36K     /etc/logrotate.d
4.0K    /etc/adjtime
4.0K    /etc/aliases
4.0K    /etc/anacrontab
4.0K    /etc/at.deny
4.0K    /etc/authselect
4.0K    /etc/bashrc
4.0K    /etc/bindresvport.blacklist
4.0K    /etc/chrony.conf
4.0K    /etc/chrony.keys
4.0K    /etc/cron.daily
4.0K    /etc/cron.hourly
4.0K    /etc/crontab
4.0K    /etc/csh.cshrc
4.0K    /etc/csh.login
4.0K    /etc/dhcp
40K     /etc/dnf
4.0K    /etc/dracut.conf
4.0K    /etc/ethertypes
4.0K    /etc/filesystems
4.0K    /etc/fstab
4.0K    /etc/gcrypt
4.0K    /etc/GREP_COLORS
4.0K    /etc/group
4.0K    /etc/group-
4.0K    /etc/gshadow
4.0K    /etc/gshadow-
4.0K    /etc/host.conf
4.0K    /etc/hostname
4.0K    /etc/hosts
4.0K    /etc/inittab
4.0K    /etc/inputrc
4.0K    /etc/issue
4.0K    /etc/issue.net
4.0K    /etc/krb5.conf
4.0K    /etc/ld.so.conf
4.0K    /etc/ld.so.conf.d
4.0K    /etc/libaudit.conf
4.0K    /etc/libuser.conf
4.0K    /etc/locale.conf
4.0K    /etc/login.defs
4.0K    /etc/logrotate.conf
4.0K    /etc/machine-id
4.0K    /etc/magic
4.0K    /etc/mailcap
4.0K    /etc/mke2fs.conf
4.0K    /etc/netconfig
4.0K    /etc/networks
4.0K    /etc/nsswitch.conf
4.0K    /etc/nsswitch.conf.bak
4.0K    /etc/openldap
4.0K    /etc/passwd
4.0K    /etc/passwd-
4.0K    /etc/printcap
4.0K    /etc/profile
4.0K    /etc/resolv.conf
4.0K    /etc/rhsm
4.0K    /etc/rocky-release
4.0K    /etc/rocky-release-upstream
4.0K    /etc/rpc
4.0K    /etc/rpm
4.0K    /etc/sestatus.conf
4.0K    /etc/shadow
4.0K    /etc/shadow-
4.0K    /etc/shells
4.0K    /etc/sos
4.0K    /etc/subgid
4.0K    /etc/subuid
4.0K    /etc/sudo.conf
4.0K    /etc/sudo-ldap.conf
4.0K    /etc/sysctl.conf
4.0K    /etc/system-release-cpe
4.0K    /etc/updatedb.conf
4.0K    /etc/usb_modeswitch.conf
4.0K    /etc/vconsole.conf
4.0K    /etc/vimrc
4.0K    /etc/virc
4.0K    /etc/xattr.conf
44K     /etc/nftables
48K     /etc/libibverbs.d
56K     /etc/yum.repos.d
604K    /etc/ssh
60K     /etc/mime.types
60K     /etc/security
680K    /etc/services
72K     /etc/bash_completion.d
8.0K    /etc/cron.d
8.0K    /etc/default
8.0K    /etc/depmod.d
8.0K    /etc/DIR_COLORS
8.0K    /etc/DIR_COLORS.256color
8.0K    /etc/DIR_COLORS.lightbgcolor
8.0K    /etc/groff
8.0K    /etc/idmapd.conf
8.0K    /etc/krb5.conf.d
8.0K    /etc/libnl
8.0K    /etc/libreport
8.0K    /etc/libssh
8.0K    /etc/lsm
8.0K    /etc/makedumpfile.conf.sample
8.0K    /etc/man_db.conf
8.0K    /etc/modprobe.d
8.0K    /etc/nvme
8.0K    /etc/polkit-1
8.0K    /etc/protocols
8.0K    /etc/rwtab.d
8.0K    /etc/sudoers
8.0K    /etc/tcsd.conf
8.0K    /etc/X11
88K     /etc/profile.d
88K     /etc/sysconfig
92K     /etc/grub.d
932K    /etc/pki
9.3M    /etc/selinux

3.2.3 文件系统文件定制工具dd

平常可使用dd命令来生成定制大小的文件数据

#我需要生成一个5M的文件,那么代码应当如下
[test@localhost ~]$ dd if=/dev/zero of=1M.txt bs=1M count=1
记录了1+0 的读入
记录了1+0 的写出
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.000708836 s, 1.5 GB/s
[test@localhost ~]$ ll -h
总用量 1.0M
-rw-rw-r--. 1 test test 1.0M 1月  18 21:12 1M.txt

#将sda1的文件进行备份【以压缩的形式备份整个硬盘分区的文件】
[test@localhost ~]$ sudo dd if=/dev/sda | gzip > ./backup1.bak
记录了2097152+0 的读入
记录了2097152+0 的写出
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 11.6635 s, 92.1 MB/s
[test@localhost ~]$ ll -h
总用量 1.2G
-rw-rw-r--. 1 test test 1.0M 1月  18 21:12 1M.txt
-rw-rw-r--. 1 test test 170M 1月  18 21:22 backup1.bak

#文件A的部分内容插入到文件B的某一个段落并且覆盖当中,可用如下命令
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
#count=128是文件A截取内容的大小,skip是文件A跳过的部分,seek是文件B需要覆盖的开始位置,conv为文件写入的模式,当前的notrunc为覆盖的方式

3.3 磁盘分区相关

3.3.1 MBR和GPT相关概念(略)-本人是桌面运维大致了解,看过视频后省略

3.3.2 fdisk分区

#只需要记一下ndpw即可
[test@localhost ~]$ sudo fdisk /dev/sda
[sudo] test 的密码:

欢迎使用 fdisk (util-linux 2.32.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


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

帮助:

  DOS (MBR)
   a   开关 可启动 标志
   b   编辑嵌套的 BSD 磁盘标签
   c   开关 dos 兼容性标志

  常规
   d   删除分区
   F   列出未分区的空闲区
   l   列出已知分区类型
   n   添加新分区
   p   打印分区表
   t   更改分区类型
   v   检查分区表
   i   打印某个分区的相关信息

  杂项
   m   打印此菜单
   u   更改 显示/记录 单位
   x   更多功能(仅限专业人员)

  脚本
   I   从 sfdisk 脚本文件加载磁盘布局
   O   将磁盘布局转储为 sfdisk 脚本文件

  保存并退出
   w   将分区表写入磁盘并退出
   q   退出而不保存更改

  新建空磁盘标签
   g   新建一份 GPT 分区表
   G   新建一份空 GPT (IRIX) 分区表
   o   新建一份的空 DOS 分区表
   s   新建一份空 Sun 分区表

3.3.3 mkfs格式化

[test@localhost ~]$ mkfs --h

用法:
 mkfs [选项] [-t <类型>] [文件系统选项] <设备> [<大小>]

创建一个Linux 文件系统。

选项:
 -t, --type=<类型>  文件系统类型;若不指定,将使用 ext2
     fs-options     实际文件系统构建程序的参数
     <设备>         要使用设备的路径
     <大小>         要使用设备上的块数
 -V, --verbose      解释正在进行的操作;
                      多次指定 -V 将导致空运行(dry-run)
 -h, --help         display this help
 -V, --version      display version

更多信息请参阅 mkfs(8)。

或
mkfs.文件系统类型 /dev/sda1

3.3.4 挂载操作-mount,卸载操作umount

[test@localhost ~]$ mount --help

用法:
 mount [-lhV]
 mount -a [选项]
 mount [选项] [--source] <源> | [--target] <目录>
 mount [选项] <源> <目录>
 mount <操作> <挂载点> [<目标>]

挂载文件系统。

选项:
 -a, --all               挂载 fstab 中的所有文件系统
 -c, --no-canonicalize   不对路径规范化
 -f, --fake              空运行;跳过 mount(2) 系统调用
 -F, --fork              对每个设备禁用 fork(和 -a 选项一起使用)
 -T, --fstab <路径>      /etc/fstab 的替代文件
 -i, --internal-only     不调用 mount.<type> 辅助程序
 -l, --show-labels       也显示文件系统标签
 -n, --no-mtab           不写 /etc/mtab
 -o, --options <列表>    挂载选项列表,以英文逗号分隔
 -O, --test-opts <列表>  限制文件系统集合(和 -a 选项一起使用)
 -r, --read-only         以只读方式挂载文件系统(同 -o ro)
 -t, --types <列表>      限制文件系统类型集合
     --source <源>       指明源(路径、标签、uuid)
     --target <目标>     指明挂载点
 -v, --verbose           打印当前进行的操作
 -w, --rw, --read-write  以读写方式挂载文件系统(默认)

 -h, --help              display this help
 -V, --version           display version

源:
 -L, --label <标签>      同 LABEL=<label>
 -U, --uuid <uuid>       同 UUID=<uuid>
 LABEL=<标签>            按文件系统标签指定设备
 UUID=<uuid>             按文件系统 UUID 指定设备
 PARTLABEL=<标签>        按分区标签指定设备
 PARTUUID=<uuid>         按分区 UUID 指定设备
 <设备>                  按路径指定设备
 <目录>                  绑定式挂载的挂载点(参阅 --bind/rbind)
 <文件>                  用于设置回环设备的常规文件

操作:
 -B, --bind              挂载其他位置的子树(同 -o bind)
 -M, --move              将子树移动到其他位置
 -R, --rbind             挂载其他位置的子树及其包含的所有子挂载(submount)
 --make-shared           将子树标记为 共享
 --make-slave            将子树标记为 从属
 --make-private          将子树标记为 私有
 --make-unbindable       将子树标记为 不可绑定
 --make-rshared          递归地将整个子树标记为 共享
 --make-rslave           递归地将整个子树标记为 从属
 --make-rprivate         递归地将整个子树标记为 私有
 --make-runbindable      递归地将整个子树标记为 不可绑定

更多信息请参阅 mount(8)。

#用法1
mount -t 文件系统类型 /dev/sdb1 /path/to/dir
#用法2
mount  /dev/sdb1 /path/to/dir

umonut  /dev/sdb1
mount   /path/to/dir

#挂载之后重启即失效

#永久挂载指的是操作系统启动的时候自动挂载
#可在配置文件中加入相关的配置
#配置文件的路径:/etc/fstab

[test@localhost ~]$ cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri Nov 21 12:34:32 2025
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
# 设备路径/文件系统标识	挂载点目录				文件系统类型	挂在选项		是否备份
/dev/mapper/rl-root     /                       xfs     defaults        0 0
UUID=1e661bda-b17b-4ad7-adff-1ed2d4363bb2 /boot                   xfs     defaults        0 0
/dev/mapper/rl-swap     none                    swap    defaults        0 0

#若想要开机自动挂载,可在上述文件中直接编辑,保存后使用命令monut -a应用新的配置文件,考虑systemctl服务重开,或者重启之后直接检验
#永久禁用可考虑注释上述文件中的对应条目即可

3.4 RAID和LVM相关内容

3.4.1 RAID阵列基础知识(桌面运维向上发展服务器运维基本学过,看过视频后省略)

3.4.2 软RAID-mdadm【可实操,但容量不要太大】

[test@localhost ~]$ mdadm --help
mdadm is used for building, managing, and monitoring
Linux md devices (aka RAID arrays)
Usage: mdadm --create device options...										#创建软RAID磁盘组
            Create a new array from unused devices.
       mdadm --assemble device options...
            Assemble a previously created array.
       mdadm --build device options...
            Create or assemble an array without metadata.
       mdadm --manage device options...
            make changes to an existing array.
       mdadm --misc options... devices
            report on or modify various md related devices.
       mdadm --grow options device
            resize/reshape an active array
       mdadm --incremental device
            add/remove a device to/from an array as appropriate
       mdadm --monitor options...
            Monitor one or more array for significant changes.
       mdadm device options...
            Shorthand for --manage.
Any parameter that does not start with '-' is treated as a device name
or, for --examine-bitmap, a file name.
The first such name is often the name of an md device.  Subsequent
names are often names of component devices.

 For detailed help on the above major modes use --help after the mode
 e.g.
         mdadm --assemble --help
 For general help on options use
         mdadm --help-options

3.4.3 LVM相关--逻辑卷组

3.4.3.1 基础概念

相当于PV=物理硬盘

VG(卷组)=PV(多个)组成

在VG的基础上形成LV,LV给文件系统使用

整体概念如下图所示:

img

3.4.3.2 LVM相关的命令

#查看
pvs
vgs
lvs

#创建
pvcreate
vgcreate
lvcreate

#删除
pvremove
vgremove
lvremove

#环境部署
yum/dnf/apt install lvm2				#安装lvm相关的命令并且在实操之前准备5块相应的空盘(VMware等虚拟机软件可以关机后新增)

#查看lv的路径可用下列命令进行
lvscan

#lvs|lvscan|lvdisplay命令作用一览

[root@localhost ~]# lvs
  LV   VG Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl -wi-ao---- 36.94g                                                    
  swap rl -wi-ao----  2.05g                                                    
[root@localhost ~]# lvscan
  ACTIVE            '/dev/rl/swap' [2.05 GiB] inherit
  ACTIVE            '/dev/rl/root' [36.94 GiB] inherit
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/rl/swap
  LV Name                swap
  VG Name                rl
  LV UUID                qr6P2A-gUF9-QLW2-yOcL-j0GT-rZU5-DCF6sD
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2025-11-21 07:34:29 -0500
  LV Status              available
  # open                 2
  LV Size                2.05 GiB
  Current LE             526
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1
   
  --- Logical volume ---
  LV Path                /dev/rl/root
  LV Name                root
  VG Name                rl
  LV UUID                qcN0TE-E8uq-9M0V-pkB6-A0Ln-9eUS-xqgIeU
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2025-11-21 07:34:30 -0500
  LV Status              available
  # open                 1
  LV Size                36.94 GiB
  Current LE             9457
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

3.4.3.3 LVM创建实操

预先准备好五个空的硬盘,如下所示:

img

完成之后进入系统查看一下相关的信息,保证虚拟的物理硬盘可用。

#使用lsblk可查看硬盘相关的信息
[root@localhost ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   40G  0 disk 
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0   39G  0 part 
  ├─rl-root 253:0    0   37G  0 lvm  /
  └─rl-swap 253:1    0  2.1G  0 lvm  [SWAP]
sdb           8:16   0    2G  0 disk 
sdc           8:32   0    2G  0 disk 
sdd           8:48   0    2G  0 disk 
sde           8:64   0    2G  0 disk 
sdf           8:80   0    2G  0 disk 
sr0          11:0    1 1024M  0 rom  


[root@localhost ~]# pvcreate /dev/sdb /dev/sdc /dev/sde
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.
  Physical volume "/dev/sde" successfully created.
[root@localhost ~]# pvs
  PV         VG Fmt  Attr PSize   PFree
  /dev/sda2  rl lvm2 a--  <39.00g    0 
  /dev/sdb      lvm2 ---    2.00g 2.00g
  /dev/sdc      lvm2 ---    2.00g 2.00g
  /dev/sde      lvm2 ---    2.00g 2.00g

#通过pvdisplay查看相关的pv的信息

[root@localhost ~]# pvdisplay /dev/sdb
  "/dev/sdb" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               bHb3uS-R1mf-H7Zf-CzC1-FQq5-hqLQ-fvfZmk

#创建vg并查看其相关信息

[root@localhost ~]# vgcreate -s 16M testvg /dev/sdb /dev/sdc
  Volume group "testvg" successfully created
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  rl       1   2   0 wz--n- <39.00g     0 
  testvg   2   0   0 wz--n-  <3.97g <3.97g
[root@localhost ~]# vgdisplay testvg
  --- Volume group ---
  VG Name               testvg
  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               <3.97 GiB
  PE Size               16.00 MiB
  Total PE              254
  Alloc PE / Size       0 / 0   
  Free  PE / Size       254 / <3.97 GiB
  VG UUID               1GsKIq-IuFh-Lqgw-AQh2-w3fy-k6vz-gCgfZi

#创建lv

#以数据块数量的形式创建lv。以lv1为名,使用100个数据块,在testvg这个vg中创建lv,其大小为16M*100=1600M大小。
[root@localhost ~]# lvcreate -l 100 -n lv1 testvg
  Logical volume "lv1" created.
[root@localhost ~]# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl     -wi-ao---- 36.94g                                                    
  swap rl     -wi-ao----  2.05g                                                    
  lv1  testvg -wi-a-----  1.56g

#以总容量的形式创建lv。以lv2为名,总容量为5G(必须为16M的倍数),在testvg这个vg中创建lv。
#因硬盘容量较小,故需要删除前面创建的lv,下同
[root@localhost ~]# lvremove /dev/testvg/lv1
Do you really want to remove active logical volume testvg/lv1? [y/n]: y
  Logical volume "lv1" successfully removed.
[root@localhost ~]# lvcreate -L 1G -n lv2 testvg
  Logical volume "lv2" created.
[root@localhost ~]# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl     -wi-ao---- 36.94g                                                    
  swap rl     -wi-ao----  2.05g                                                    
  lv2  testvg -wi-a-----  1.00g

#以硬盘空余总空间来创建lv
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  rl       1   2   0 wz--n- <39.00g     0 
  testvg   2   1   0 wz--n-  <3.97g <2.97g
[root@localhost ~]# lvcreate -l 10%free -n lv3 testvg
  Logical volume "lv3" created.
[root@localhost ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl     -wi-ao----  36.94g                                                    
  swap rl     -wi-ao----   2.05g                                                    
  lv2  testvg -wi-a-----   1.00g                                                    
  lv3  testvg -wi-a----- 304.00m

#分区完成后,进行格式化的操作
[root@localhost ~]# mkfs.ext4 /dev/testvg/lv2
mke2fs 1.45.6 (20-Mar-2020)
创建含有 262144 个块(每块 4k)和 65536 个inode的文件系统
文件系统UUID:c9b14e12-fca1-4536-a6cf-20f4cb06b487
超级块的备份存储于下列块: 
        32768, 98304, 163840, 229376

正在分配组表: 完成                            
正在写入inode表: 完成                            
创建日志(8192 个块)完成
写入超级块和文件系统账户统计信息: 已完成

[root@localhost ~]# lsblk -f
NAME         FSTYPE      LABEL UUID                                   MOUNTPOINT
sda                                                                   
├─sda1       xfs               1e661bda-b17b-4ad7-adff-1ed2d4363bb2   /boot
└─sda2       LVM2_member       xbMTEL-CMOa-fC9Z-8fvL-kB3u-WH46-UesI9c 
  ├─rl-root  xfs               4032e46e-7aee-4216-a371-f8106bc55f39   /
  └─rl-swap  swap              ec87ca75-6091-4baf-889c-c53faddfd581   [SWAP]
sdb          LVM2_member       bHb3uS-R1mf-H7Zf-CzC1-FQq5-hqLQ-fvfZmk 
├─testvg-lv2 ext4              c9b14e12-fca1-4536-a6cf-20f4cb06b487   
└─testvg-lv3                                                          
sdc          LVM2_member       foNNFm-OVWR-g8we-lFrn-cQHP-hidO-VwNdyC 
sdd                                                                   
sde          LVM2_member       dVMznj-nGWg-0R3w-MbLz-xKyv-238W-BWCmT9 
sdf                                                                   
sr0

#格式化完成之后需要挂载到具体的路径下进行文件的存储
[root@localhost ~]# mount /dev/testvg/lv2 /mnt
[root@localhost ~]# mount | grep mnt
/dev/mapper/testvg-lv2 on /mnt type ext4 (rw,relatime,seclabel)
[root@localhost ~]# cd /mnt
[root@localhost mnt]# echo xxxx> xxx.txt
[root@localhost mnt]# ls
lost+found  xxx.txt
[root@localhost mnt]# cat xxx.txt 
xxxx

#对vg进行扩容,从原来的4G扩容到现在的6G
[root@localhost mnt]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  rl       1   2   0 wz--n- <39.00g    0 
  testvg   2   2   0 wz--n-  <3.97g 2.67g
[root@localhost mnt]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  rl     lvm2 a--  <39.00g      0 
  /dev/sdb   testvg lvm2 a--    1.98g 704.00m
  /dev/sdc   testvg lvm2 a--    1.98g   1.98g
  /dev/sde          lvm2 ---    2.00g   2.00g
[root@localhost mnt]# vgextend testvg /dev/sde
  Volume group "testvg" successfully extended
[root@localhost mnt]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  rl     lvm2 a--  <39.00g      0 
  /dev/sdb   testvg lvm2 a--    1.98g 704.00m
  /dev/sdc   testvg lvm2 a--    1.98g   1.98g
  /dev/sde   testvg lvm2 a--    1.98g   1.98g
[root@localhost mnt]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  rl       1   2   0 wz--n- <39.00g     0 
  testvg   3   2   0 wz--n-   5.95g <4.66g

#对lv进行扩容
[root@localhost mnt]# df -h
文件系统                容量  已用  可用 已用% 挂载点
devtmpfs                888M     0  888M    0% /dev
tmpfs                   907M     0  907M    0% /dev/shm
tmpfs                   907M   17M  890M    2% /run
tmpfs                   907M     0  907M    0% /sys/fs/cgroup
/dev/mapper/rl-root      37G  3.6G   34G   10% /
/dev/sda1              1014M  188M  827M   19% /boot
tmpfs                   182M     0  182M    0% /run/user/1000
/dev/mapper/testvg-lv2  976M  2.6M  907M    1% /mnt
#先扩容lv
[root@localhost mnt]# lvextend -L +1G /dev/testvg/lv2
  Size of logical volume testvg/lv2 changed from 1.00 GiB (64 extents) to 2.00 GiB (128 extents).
  Logical volume testvg/lv2 successfully resized.
[root@localhost mnt]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl     -wi-ao----  36.94g                                                    
  swap rl     -wi-ao----   2.05g                                                    
  lv2  testvg -wi-ao----   2.00g                                                    
  lv3  testvg -wi-a----- 304.00m                                                    
#调整lv容量在文件系统当中的显示
[root@localhost mnt]# resize2fs /dev/testvg/lv2
resize2fs 1.45.6 (20-Mar-2020)
/dev/testvg/lv2 上的文件系统已被挂载于 /mnt;需要进行在线调整大小

old_desc_blocks = 1, new_desc_blocks = 1
/dev/testvg/lv2 上的文件系统现在为 524288 个块(每块 4k)。

[root@localhost mnt]# df -h | grep mnt
/dev/mapper/testvg-lv2  2.0G  3.1M  1.9G    1% /mnt

#也可以一步到位对lv在文件系统当中的容量进行扩容
[root@localhost mnt]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl     -wi-ao----  36.94g                                                    
  swap rl     -wi-ao----   2.05g                                                    
  lv2  testvg -wi-ao----   2.00g                                                    
  lv3  testvg -wi-a----- 304.00m                                                    
[root@localhost mnt]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  rl       1   2   0 wz--n- <39.00g     0 
  testvg   3   2   0 wz--n-   5.95g <3.66g
[root@localhost mnt]# lvresize -r -l +100%free /dev/testvg/lv2
  Size of logical volume testvg/lv2 changed from 2.00 GiB (128 extents) to <5.66 GiB (362 extents).
  Logical volume testvg/lv2 successfully resized.
resize2fs 1.45.6 (20-Mar-2020)
/dev/mapper/testvg-lv2 上的文件系统已被挂载于 /mnt;需要进行在线调整大小

old_desc_blocks = 1, new_desc_blocks = 1
/dev/mapper/testvg-lv2 上的文件系统现在为 1482752 个块(每块 4k)。

[root@localhost mnt]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl     -wi-ao----  36.94g                                                    
  swap rl     -wi-ao----   2.05g                                                    
  lv2  testvg -wi-ao----  <5.66g                                                    
  lv3  testvg -wi-a----- 304.00m                                                    

#缩减容量(不考虑数据一致性的问题)
#取消挂载【退出当前目录才可以取消挂载】
[root@localhost mnt]# umount /dev/testvg/lv2
umount: /mnt: target is busy.
[root@localhost mnt]# cd ..
[root@localhost /]# umount /dev/testvg/lv2
#检查当前lv是否有问题,然后再进行缩容
[root@localhost /]# e2fsck /dev/testvg/lv2 -f
e2fsck 1.45.6 (20-Mar-2020)
第 1 步:检查inode、块和大小
第 2 步:检查目录结构
第 3 步:检查目录连接性
第 4 步:检查引用计数
第 5 步:检查组概要信息
/dev/testvg/lv2:12/376832 文件(0.0% 为非连续的), 32875/1482752 块
#将lv2从6G缩容为3G大小
[root@localhost /]# lvreduce -L 3G /dev/testvg/lv2
  WARNING: Reducing active logical volume to 3.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testvg/lv2? [y/n]: y
  Size of logical volume testvg/lv2 changed from <5.66 GiB (362 extents) to 3.00 GiB (192 extents).
  Logical volume testvg/lv2 successfully resized.
[root@localhost /]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl     -wi-ao----  36.94g                                                    
  swap rl     -wi-ao----   2.05g                                                    
  lv2  testvg -wi-a-----   3.00g                                                    
  lv3  testvg -wi-a----- 304.00m 

#使用精简命令尝试缩容
[root@localhost /]# lvreduce -L 1G -r /dev/testvg/lv2
fsck,来自 util-linux 2.32.1
/dev/mapper/testvg-lv2:没有问题,11/196608 文件,31036/786432 块
resize2fs 1.45.6 (20-Mar-2020)
将 /dev/mapper/testvg-lv2 上的文件系统调整为 262144 个块(每块 4k)。
/dev/mapper/testvg-lv2 上的文件系统现在为 262144 个块(每块 4k)。

  Size of logical volume testvg/lv2 changed from 3.00 GiB (192 extents) to 1.00 GiB (64 extents).
  Logical volume testvg/lv2 successfully resized.
[root@localhost /]# mount /dev/testvg/lv2 /mnt
[root@localhost /]# mount |grep mnt
/dev/mapper/testvg-lv2 on /mnt type ext4 (rw,relatime,seclabel)

#删除并还原相关的lvm
[root@localhost /]# lvremove /dev/testvg/lv3
Do you really want to remove active logical volume testvg/lv3? [y/n]: y
  Logical volume "lv3" successfully removed.
[root@localhost /]# lvremove /dev/testvg/lv2
  Logical volume testvg/lv2 contains a filesystem in use.
[root@localhost /]# umount /dev/testvg/lv2
[root@localhost /]# lvremove /dev/testvg/lv2
Do you really want to remove active logical volume testvg/lv2? [y/n]: y
  Logical volume "lv2" successfully removed.
[root@localhost /]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  rl     lvm2 a--  <39.00g    0 
  /dev/sdb   testvg lvm2 a--    1.98g 1.98g
  /dev/sdc   testvg lvm2 a--    1.98g 1.98g
  /dev/sde   testvg lvm2 a--    1.98g 1.98g
[root@localhost /]# pvremove /dev/sdb /dev/sdc /dev/sde
  PV /dev/sdb is used by VG testvg so please use vgreduce first.
  (If you are certain you need pvremove, then confirm by using --force twice.)
  /dev/sdb: physical volume label not removed.
  PV /dev/sdc is used by VG testvg so please use vgreduce first.
  (If you are certain you need pvremove, then confirm by using --force twice.)
  /dev/sdc: physical volume label not removed.
  PV /dev/sde is used by VG testvg so please use vgreduce first.
  (If you are certain you need pvremove, then confirm by using --force twice.)
  /dev/sde: physical volume label not removed.
[root@localhost /]# vgremove testvg
  Volume group "testvg" successfully removed
[root@localhost /]# pvremove /dev/sdb /dev/sdc /dev/sde
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.
  Labels on physical volume "/dev/sde" successfully wiped.                             

4 软件管理

4.1 软件管理的目的

在os上,安装配套的软件环境

本地安装/离线安装 在线安装/软件源安装
Rocky Linux rpm rpm yum|dnf
Ubuntu deb dpkg apt

4.2软件安装一下

#rokcy本地安装软件包
rpm -i 					#安装本地包
	-v					#显示安装过程
	-h					#显示进度条
	-e					#卸载
	-q					#查询


  1. [:space:] ↩︎

posted @ 2026-01-20 12:10  小茗同学study  阅读(1)  评论(0)    收藏  举报