Linux磁盘管理

磁盘管理

Linux哲学思想:Linux中一切皆文件

所以对于硬件设备来说,在Linux中也是以文件的形式存在,设备文件

[root@kylin-xu ~]# ll /dev/sda*
brw-rw---- 1 root disk 8, 0 Nov 20 04:11 /dev/sda
brw-rw---- 1 root disk 8, 1 Nov 20 04:11 /dev/sda1
brw-rw---- 1 root disk 8, 2 Nov 20 04:11 /dev/sda2
				 主设备号  次设备号
[root@kylin-xu ~]# ll /dev/zero 
crw-rw-rw- 1 root root 1, 5 Nov 20 04:11 /dev/zero

主设备号:标识设备类型 major number

次设备号:标识同一类型下的不同设备 minor number

【1】、磁盘外部结构

磁盘分类:

固态硬盘: 内部是主板和U盘类似

机械硬盘: 盘片 主轴 传动手臂 做机械运动 类似 DVD

Nvme硬盘

PCI-E接口

大小分类:

3.5英寸 : 台式机

2.5英寸: 服务器 笔记本

接口类型:

IDE接口 # 淘汰

SCSI接口 # 淘汰

SATA接口 # 台式机 笔记本

SAS接口 #企业服务器标配

固态磁盘价格高,存储少。有寿命。

机械磁盘价格低,存储大。老不死。

固态速度比机械磁盘速度快

磁盘存储大小和转速:

企业标配SAS接口: 300G 600G 900G 转速 每分钟转多少圈 5400转 7200转 10K 15K

转速越快性能越好

存储越大转速越慢 1T 转速最高10K 2T 4T 8T 20T

注意:速度不是由单纯的接口类型决定,支持Nvme协议硬盘速度是最快的

【2】、磁盘阵列Raid

作用:
获得更大的容量		 # 将多块磁盘逻辑的组合成一块磁盘
获得更高的性能	     # 写入服务器 写两块磁盘比写一块磁盘速度快
获得更好的安全性    # 可以同时将数据写入两块盘 一块盘做备份

面试+笔试题

RAID级别 硬盘数量 可用容量 安全性 性能 使用场景
0 至少一块 磁盘数量总和 不安全 读写最快 要求速度不要安全,例如数据库从库
1 只能2块 磁盘数量的一半 可以坏一块 写慢,读凑合 要求安全,速度一般的场景,例如系统盘
5 至少3块 n-1块 坏1块 0和1的折中 业务流量较稳定的场景
10 至少4块,2的倍数即可 一半 坏1半 读写速度快 高并发场景

【3】、磁盘分区

windows磁盘默认的是MBR格式

MBR格式最多支持4个主分区 C D E F

MBR格式支持3个主分支+1个扩展分区

Linux磁盘表示方法

sda   # 表示第一块磁盘
    sda1 # 表示第一块磁盘的第一个分区
    sda2 # 表示第一块磁盘的第二个分区
sdb   # 表示第二块磁盘
    sdb1 # 表示第2块磁盘的第1个分区
    sdb5 # 表示第2块磁盘的第1个逻辑分区

1、Linux中磁盘分区方式

1.系统分区
第一种分区: 标准分区   300G磁盘
/boot   200M    # 存放系统内核的位置 引导程序所在的位置
/		剩余空间 # 存放系统

第二种分区: swap分区
/boot  200M
swap   2G       # 当内存空间不够用时,临时使用磁盘空间充当内存来使用 速度慢 解决OOM问题 内存溢出。
			    # linux内存如果达到最大限制,则自动杀死占用最高内存的进程来让系统正常运行
				# swap 对用户的服务器需要增加物理内存
		        # 比较着急,或者公司内部测试服务器 自己使用的。
/     剩余空间

第三种分区: 比较少
/boot  200M
swap   2G
/      50G    # 系统
/data  1.8T   # 数据分区

2、磁盘分区类型

MBR:4 primary parted or 3 primary parted + 1 extended parted + many logical parted

GPT: 128 primary parted

3、磁盘分区步骤

1.MBR格式  小于2T磁盘使用fdisk分区
2.GPT分区  大于2T磁盘使用parted分区

第一步:插入一块20G SCSI类型硬盘
第二部:重启 或者 通过命令行重新扫描SCSI总线来添加硬盘
echo '- - -' > /sys/class/scsi_host/host0/scan 
echo '- - -' > /sys/class/scsi_host/host1/scan 
echo '- - -' > /sys/class/scsi_host/host2/scan 
# 由于我们并不知道哪一个总线是,就都扫一遍就行

# 再Ubuntu系统中/sys/class/scsi_hosts/有许多总线,我们有两种方式
root@xu-ubuntu:~# for i in `ls /sys/class/scsi_host/` ; do echo '- - -' > /sys/class/scsi_host/${i}/scan; done
# 找出SPI总线对应的 host,只扫描该 host
root@xu-ubuntu:~# grep mptspi /sys/class/scsi_host/host*/proc_name
/sys/class/scsi_host/host31/proc_name:mptspi
root@xu-ubuntu:~# echo '- - -' > /sys/class/scsi_host/host31/scan
第三部:磁盘分区  # fdisk创建分区
[root@kylin-xu ~]# fdisk  /dev/sdb
Command (m for help): m			  # 查看菜单

Help:
   d   delete a partition		  # 删除一个分区  
   l   list known partition types # 显示分区类型
   n   add a new partition		  # 创建新的分区
   p   print the partition table  # 输出分好的分区表
   m   print this menu		      # 打印菜单
   w   write table to disk and exit #保存并且推出
   q   quit without saving changes	# 退出不保存
Command (m for help): n   # 创建分区
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p  # 指定类型,默认是primary
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): +5G

Created a new partition 1 of type 'Linux' and of size 5 GiB.
Command (m for help): n   # 第二个分区
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (2-4, default 2): 
First sector (10487808-41943039, default 10487808): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (10487808-41943039, default 41943039): +10G

Created a new partition 2 of type 'Linux' and of size 10 GiB.

Command (m for help): d   # 删除分区 
Partition number (1-4, default 4): 

Command (m for help): n  # 创建一个扩展分区 
Partition type
   p   primary (3 primary, 0 extended, 1 free)
   e   extended (container for logical partitions)
Select (default e): 

Using default response e.
Selected partition 4
First sector (33556480-41943039, default 33556480): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (33556480-41943039, default 41943039): 

Created a new partition 4 of type 'Extended' and of size 4 GiB.

Command (m for help): p   # 查看创建的分区类型
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5fbfe031

Device     Boot    Start      End  Sectors Size Id Type
/dev/sdb1           2048 10487807 10485760   5G 83 Linux
/dev/sdb2       10487808 31459327 20971520  10G 83 Linux
/dev/sdb3       31459328 33556479  2097152   1G 83 Linux
/dev/sdb4       33556480 41943039  8386560   4G  5 Extended


Command (m for help): n  # 创建逻辑分区
All primary partitions are in use.
Adding logical partition 6
First sector (35657728-41943039, default 35657728): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (35657728-41943039, default 41943039): 

Created a new partition 6 of type 'Linux' and of size 3 GiB.


Command (m for help): w  # 保存分区
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

[root@kylin-xu ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   59G  0 part 
  ├─klas-root   253:0    0 38.3G  0 lvm  /
  ├─klas-swap   253:1    0    2G  0 lvm  [SWAP]
  └─klas-backup 253:2    0 18.7G  0 lvm  /backup
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    5G  0 part 
├─sdb2            8:18   0   10G  0 part 
├─sdb3            8:19   0    1G  0 part 
├─sdb4            8:20   0    1K  0 part 
├─sdb5            8:21   0    1G  0 part 
└─sdb6            8:22   0    3G  0 part 
sr0              11:0    1  4.3G  0 rom 

# 如果我们使用分区完成后,使用lsblk查看不到我们分区的内容,这是由于lsblk是查看内存中的信息,又可能我们分区完成后,内存没有更新,这是我们需要手动刷新下
[root@kylin-xu ~]# partprobe

非交互式创建分区

[root@kylin-xu ~]# echo -e 'p\nn\n\n+1G\np\n' | fdisk /dev/sdb
# \n 表示回车
# parted创建分区
(parted) mklabel gpt 		# 将磁盘类型修改为gpt格式
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

(parted) mkpart             	# 创建分区                                              
Partition name?  []? primary    # 分区的名称  自定义叫啥都行                         
File system type?  [ext2]? xfs                                            
Start? 0                                                                  
End? 500G                                                                 
Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s
Ignore/Cancel? I  
(parted) print   
Disk Flags: 

Number  Start   End    Size   File system  Name     Flags
 1      17.4kB  500GB  500GB  xfs          primary

(parted) mkpart 
Partition name?  []? parimary                                             
File system type?  [ext2]? xfs                                            
Start? 500G                                                               
End? 1000G
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size   File system  Name      Flags
 1      17.4kB  500GB   500GB               primary
 2      500GB   1000GB  500GB  xfs          parimary

(parted) mkpart primary xfs 1000G  4000G    	# 非交互式分区                             
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
(parted) quit  # 退出parted分区

parted重要的子命令

help [COMMAND] # 打印菜单帮助
mklabel,mktable LABEL-TYPE # 创建分区表类型
mkpart PART-TYPE [FS-TYPE] START END # 创建分区
print [devices|free|list,all|NUMBER] # 查看分区表
quit # 退出
rm NUMBER # 删除分区

第四步:格式化分区,在格式化分区之后就会出现UUID
[root@kylin-xu ~]# mkfs.xfs  /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
第五步:创建挂载点,挂载分区
[root@kylin-xu ~]# mkdir  /mnt/xfs
[root@kylin-xu ~]# mount /dev/sdb1 /mnt/xfs
[root@kylin-xu ~]# df -Th | grep /mnt/xfs
/dev/sdb1               xfs       5.0G   68M  5.0G   2% /mnt/xfs
第六步:写入/etc/fstab,开机自动挂载
vim /etc/fstab
/dev/sdb1 /mnt/xfs xfs defaults 0 0


卸载分区
[root@kylin-xu xfs]# touch 123
[root@kylin-xu xfs]# cd
[root@kylin-xu ~]# umount /mnt/xfs 
[root@kylin-xu ~]# df -Th | grep /mnt/xfs
[root@kylin-xu ~]# ll /mnt/xfs
total 0
# 我们将分区卸载之后,我们创建的内容也会消失,
# 我们重新挂载上之后就又会出现
[root@kylin-xu ~]# mount /dev/sdb1 /mnt/xfs
[root@kylin-xu ~]# ll /mnt/xfs
total 0
-rw-r--r-- 1 root root 0 Nov 20 04:08 123

我们在表示logical parted时尽量不要使用路径去表示,要使用UUID

4、Ubuntu中进行磁盘分区

# 添加磁盘
root@xu-ubuntu:~# for i in `ls /sys/class/scsi_host/` ; do echo '- - -' > /sys/class/scsi_host/${i}/scan; done
root@xu-ubuntu:~# fdisk  /dev/sdb -l
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

在Ubuntu中磁盘分区使用的是gpt分区

root@xu-ubuntu:~# gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.8

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.

Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C4537E56-7D8E-4F18-916F-4C63377E3032
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 41942973 sectors (20.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +4G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C4537E56-7D8E-4F18-916F-4C63377E3032
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 33554365 sectors (16.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         8390655   4.0 GiB     8300  Linux filesystem
Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

# 格式化
mkfs

【4】、文件系统

1、什么是文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。

操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。

查看当前内核支持的文件系统:

[root@kylin-xu ~]# ls /lib/modules/`uname -r`/kernel/fs
root@xu-ubuntu:~#  ls /lib/modules/`uname -r`/kernel/fs

系统支持的文件系统并不全是可用的,查看当前系统可用的文件系统:

 cat /proc/filesystems

当前系统支持的文件系统和当前系统可用的文件系统是两回事,modules 中的文件系统在编译时选择了才是可用的,而可用的文件系统包含了默认支持的文件系统,如果需要使用某个文件系统,而该文件系统又不在proc 中,则需要重新编译内核;

2、文件系统类型

Linux 常用文件系统

文件系统 备注
ext2 Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如/boot 分 区
ext3 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
ext4 ext 文件系统的最新版。有很多新的特性,包括纳秒级时间戳、巨型文件 (16TB)、最大1EB的文件系统,以及速度的提升
xfs SGI,支持最大8EB的文件系统
swap 交换分区专用的文件系统
iso9660 光盘文件系统

Windows 常用文件系统

文件系统 备注
FAT32 最多只能支持16TB的文件系统和4GB的文件
NTFS 最多只能支持16EB的文件系统和16EB的文件
extFAT

Unix*常用文件系统

文件系统 备注
FFS(fast)
UFS(unix) UFS是UNIX文件系统的简称,几乎是大部分UNIX类操作系统默认的基于磁盘的文件系统
JF32

3、创建文件系统

root@xu-ubuntu:~# mkfs.ext4 /dev/sdb1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 1048576 4k blocks and 262144 inodes   # 创建block和inode
Filesystem UUID: 83d410e3-5dcb-415a-8ef0-54c3d73e4b34   # 设置UUID
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

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

root@xu-ubuntu:~# mkfs.xfs  /dev/sdb2
meta-data=/dev/sdb2              isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


root@xu-ubuntu:~# lsblk  -f /dev/sdb
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sdb                                                                           
├─sdb1 ext4   1.0         83d410e3-5dcb-415a-8ef0-54c3d73e4b34                
├─sdb2 xfs                af832cf3-01c7-48eb-b4bc-a76605c7d5f6                
└─sdb3

【5】、磁盘挂载

 mount [-lhV]
 mount -a [options]
 mount [options] [--source] <source> | [--target] <directory>
 mount [options] <source> <directory>
 mount <operation> <mountpoint> [<target>]

device:指明要挂载的设备

  • 设备文件:例如:/dev/sda5
  • 卷标:-L 'LABEL', 例如 -L 'MYDATA'
  • UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
  • 伪文件系统名称:proc, sysfs, devtmpfs, configfs

mountpoint:挂载点目录必须事先存在,建议使用空目录

挂载规则

  • 一个挂载点同一时间只能挂载一个设备
  • 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
  • 一个设备可以同时挂载到多个挂载点
  • 通常挂载点一般是已存在空的目录
root@xu-ubuntu:~# mount --source /dev/sdb1 -o ro /dir1
# --source 指定挂载源,-o 指定挂载选项  ro 表示只读

root@xu-ubuntu:~# df -lh | grep  dir1
/dev/sdb1                          3.9G   24K  3.7G   1% /dir1
root@xu-ubuntu:~# touch /dir1/lll
touch: cannot touch '/dir1/lll': Read-only file system
root@xu-ubuntu:~# mount  | grep sdb1
/dev/sdb1 on /dir1 type ext4 (ro,relatime)

【6】、持久化挂载

/etc/fstab

每行定义一个要挂载的文件系统,,其中包括共 6 项

  • 要挂载的设备或伪文件系统设备文件(LABEL=label | UUID=uuid | /dev/sda1)
  • 挂载点:必须是事先存在的目录
  • 文件系统类型:ext4,xfs,iso9660,nfs,none
  • 挂载选项:defaults ,acl,bind,ro,rw 等
  • 转储频率:0 不做备份; 1 每天转储; 2 每隔一天转储
  • fsck检查的文件系统的顺序:0 不自检 ; 1 首先自检,一般只有rootfs才用;2 非rootfs使用 0
/dev/sdb1    /mnt/xfs     xfs    defaults   0   0

【7】、磁盘常用工具

1、df

文件系统查看工具

-a:显示所有
-h:以方便的形式显示数据
-T:显示文件系统类型
-t:按照文件系统类型过滤
root@xu-ubuntu:~# df -t ext4 
-l:只显示本机的文件系统
--total:最后一行汇总输出
root@xu-ubuntu:~# df -lTh --total 
Filesystem                        Type   Size  Used Avail Use% Mounted on
tmpfs                             tmpfs  388M  1.6M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4    24G  8.9G   14G  40% /
tmpfs                             tmpfs  1.9G     0  1.9G   0% /dev/shm
tmpfs                             tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/sda2                         ext4   2.0G  242M  1.6G  14% /boot
tmpfs                             tmpfs  388M  4.0K  388M   1% /run/user/1000
/dev/sdb1                         ext4   3.9G   24K  3.7G   1% /dir1
total                             -       32G  9.2G   22G  31% -

2、du

目录统计工具

-s:只显示外层目录
-h:以方便阅读的格式显示
--total:汇总统计到的所有数据
root@xu-ubuntu:~# du /etc/ -sh
6.7M    /etc/
root@xu-ubuntu:~# du /etc/  /var/log/ -sh --total 
6.7M    /etc/
36M     /var/log/
42M     total

3、dd

if=file				#从所命名文件读取而不是从标准输入
of=file			    #写到所命名的文件而不是到标准输出
bs=size				#指定块大小(既是是ibs也是obs)
count=n				#复制几个bs
# 备份MBR
root@xu-ubuntu:~# dd if=/dev/sdb of=./sdb.img bs=512 count=1

# 备份整个磁盘
dd if=/dev/sdx of=/path/to/image

【8】、磁盘相关案例

企业案例1:java环境内存不够用,大量占用swap

swap磁盘分区: 大小是内存的1-1.5倍 如果内存大于8G,则最多swap给8G即可。
什么情况下使用swap: 
       测试服务器 
       内部服务器 
       自己用的虚拟机 
       流量波动的业务。
线上服务器,业务服务器禁止使用swap,增加内存的方式解决OOM(内存溢出)问题。

如何创建swap

  • 方法1: 安装操作系统的时候
  • 方法2: 安装完成操作系统
# 生成一个1G的文件
[root@kylin-xu ~]# dd if=/dev/zero  of=/1g bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 6.15619 s, 174 MB/s

# 格式化为swap
[root@kylin-xu ~]# mkswap  /1g 
mkswap: /1g: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=3cbda684-b958-476e-b08c-1b94834d0657
[root@kylin-xu ~]# blkid /1g
/1g: UUID="3cbda684-b958-476e-b08c-1b94834d0657" TYPE="swap"

# 挂载使用swap 直接增加到原有的swap空间上
[root@kylin-xu ~]# swapon /1g
swapon: /1g: insecure permissions 0644, 0600  suggested.
[root@kylin-xu ~]# swapon -s  # 查看分区的组成
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2138108 13324   -2
/1g                                     file            1048572 0       -3
[root@kylin-xu ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       178Mi       1.1Gi        10Mi       697Mi       1.6Gi
Swap:         3.0Gi        13Mi       3.0Gi

# 写入/etc/fstab

企业案例2.无法写入文件到磁盘

第一种情况:磁盘空间满了
# 需要查找系统中的大文件,找出磁盘中大于1G的文件。
# 注意mount 会隐藏原来目录下的文件
find / -size +1G -type f
dd if=/dev/zero of=/opt/2g bs=1M count=2000
[root@kylin-xu ~]# find / -type f -size  +1G
/proc/kcore
/opt/2g

第二种情况:inode号满了,找出文件中大量的小文件
[root@kylin-xu ~]# find / -type d -size +1M 

企业案例3.解决磁盘不够用的问题

需求: 目前磁盘不够用

1.业务会持续输出日志内容到 /var/log/nginx.log文件中 10G
[root@kylin-xu ~]# dd if=/dev/zero of=/var/log/10g bs=1M count=10000
2.日志的路径不能变,解决磁盘不够用的问题。
解决方案:
1.增加大的磁盘
增加4T的磁盘
2.挂载磁盘到/data目录
[root@kylin-xu ~]# mount /dev/sdc3 /data
3.将10g文件移动到/data目录
[root@kylin-xu ~]# mv /var/log/10g  /data/
[root@kylin-xu ~]# ll /data/
total 9.8G
-rw-r--r-- 1 root root 9.8G Nov 20 17:11 10g
[root@kylin-xu ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  963M     0  963M   0% /dev
tmpfs                   tmpfs     979M     0  979M   0% /dev/shm
tmpfs                   tmpfs     979M   22M  957M   3% /run
tmpfs                   tmpfs     979M     0  979M   0% /sys/fs/cgroup
/dev/mapper/klas-root   xfs        39G  6.7G   32G  18% /
tmpfs                   tmpfs     979M     0  979M   0% /tmp
/dev/sdb1               xfs       5.0G   68M  5.0G   2% /mnt/xfs
/dev/mapper/klas-backup xfs        19G  171M   19G   1% /backup
/dev/sda1               xfs      1014M  169M  846M  17% /boot
tmpfs                   tmpfs     196M     0  196M   0% /run/user/0
/dev/sdc3               xfs       2.8T   30G  2.7T   2% /data
4.软链接到/var/log/10g
[root@kylin-xu ~]# ln -s /data/10g  /var/log/10g
[root@kylin-xu ~]# ll /var/log/10g 
lrwxrwxrwx 1 root root 9 Nov 20 17:15 /var/log/10g -> /data/10g

企业案例4.删除文件

磁盘上有个一39G的文件,删除后发现磁盘没有释放。
文件如果被进程所占用,会出现删除文件磁盘没有释放的问题。
查看当前的文件被哪个进程所占用:
[root@oldboyedu ~]# lsof |grep 10g
tail      2873                          root    3r      REG               8,32 41838247936        132 /data/10 (deleted)

杀死进程或者重启或者重新加载
[root@oldboyedu ~]# kill -9 2873

【9】、逻辑卷

1、什么是逻辑卷

LVM: Logical Volume Manager 可以允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小,允许在多个物理设备间重新组织文件系统

LVM可以弹性的更改LVM的容量

实现过程

  • 将设备指定为物理卷
  • 用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
  • 在物理卷上创建的逻辑卷, 是由物理区域(PE)组成
  • 可以在逻辑卷上创建文件系统并挂载

2、创建逻辑卷

# 创建pvs
root@xu-ubuntu:~# pvcreate /dev/sdb{1..3}
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdb3" successfully created.
root@xu-ubuntu:~# pvs
  PV         VG        Fmt  Attr PSize   PFree  
  /dev/sda3  ubuntu-vg lvm2 a--  <48.00g  24.00g
  /dev/sdb1            lvm2 ---    4.00g   4.00g
  /dev/sdb2            lvm2 ---    5.00g   5.00g
  /dev/sdb3            lvm2 ---  <11.00g <11.00g
  
# 创建vg
root@xu-ubuntu:~# vgcreate vg1 /dev/sdb{1..2}
  Volume group "vg1" successfully created
root@xu-ubuntu:~# vgs
  VG        #PV #LV #SN Attr   VSize   VFree 
  ubuntu-vg   1   1   0 wz--n- <48.00g 24.00g
  vg1         2   0   0 wz--n-   8.99g  8.99g


# 创建lvm -L:指定逻辑卷大小  -n:指定逻辑卷名字   -l:按照PE数量进行划分
root@xu-ubuntu:~# lvcreate -L 5G -n lv1 vg1
  Logical volume "lv1" created.
root@xu-ubuntu:~# lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <24.00g                                                    
  lv1       vg1       -wi-a-----   5.00g  
  
root@xu-ubuntu:~# lvcreate -l 500 -n lv2 vg1
  Logical volume "lv2" created.
root@xu-ubuntu:~# lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <24.00g                                                    
  lv1       vg1       -wi-a-----   5.00g                                                    
  lv2       vg1       -wi-a-----   1.95g                                                    

我们后续如果想使用lvm,也需要进行格式化和挂载才可以

# 格式化和挂载
root@xu-ubuntu:~# mkfs.ext4 /dev/vg1/lv1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 1310720 4k blocks and 327680 inodes
Filesystem UUID: ff6b294f-b30c-4ac2-94e9-cc57b086d207
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

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

root@xu-ubuntu:~# mount /dev/vg1/lv1 /lv1

2、对lvm进行扩容

# ext系列文件系统
# 在扩容lvm之前我们得看下vg是否还有空间允许扩容,如果vg还有空间,我们直接扩容lvm即可。如果vg没有空间,我们得先扩容vg,扩容vg需要添加pv,如果有空闲的pv直接扩容即可,没有空闲的pv,先使用pvcreate创建出pv
root@xu-ubuntu:~# vgextend vg1  /dev/sdb3
  Volume group "vg1" successfully extended
root@xu-ubuntu:~# lvextend -L 7G /dev/vg1/lv1
  Size of logical volume vg1/lv1 changed from 5.00 GiB (1280 extents) to 7.00 GiB (1792 extents).
  Logical volume vg1/lv1 successfully resized.
root@xu-ubuntu:~# df -Th   # 扩容完成后我们还需要告知文件系统,才能生效
Filesystem                        Type   Size  Used Avail Use% Mounted on
tmpfs                             tmpfs  388M  1.7M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4    24G  8.9G   14G  40% /
tmpfs                             tmpfs  1.9G     0  1.9G   0% /dev/shm
tmpfs                             tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/sda2                         ext4   2.0G  242M  1.6G  14% /boot
tmpfs                             tmpfs  388M  4.0K  388M   1% /run/user/1000
/dev/mapper/vg1-lv1               ext4   4.9G   24K  4.6G   1% /lv1
root@xu-ubuntu:~# resize2fs /dev/vg1/lv1    # 使用resize2fs告知ext系列文件系统
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/vg1/lv1 is mounted on /lv1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg1/lv1 is now 1835008 (4k) blocks long.

root@xu-ubuntu:~# resize2fs /dev/vg1/lv1 | grep lv1
resize2fs 1.46.5 (30-Dec-2021)
The filesystem is already 1835008 (4k) blocks long.  Nothing to do!

root@xu-ubuntu:~# df -Th | grep  lv1
/dev/mapper/vg1-lv1               ext4   6.9G   24K  6.5G   1% /lv1000000000000000000
# xfs类型文件系统
# 其他过程都一样,只是在告知文件系统时的命令不同 xfs文件系统使用的是 xfs_growfs
root@xu-ubuntu:~# lvextend -L 5G /dev/vg1/lv2
  Size of logical volume vg1/lv2 changed from 1.95 GiB (500 extents) to 5.00 GiB (1280 extents).
  Logical volume vg1/lv2 successfully resized.
root@xu-ubuntu:~# df -Th
Filesystem                        Type   Size  Used Avail Use% Mounted on
tmpfs                             tmpfs  388M  1.7M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4    24G  8.9G   14G  40% /
tmpfs                             tmpfs  1.9G     0  1.9G   0% /dev/shm
tmpfs                             tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/sda2                         ext4   2.0G  242M  1.6G  14% /boot
tmpfs                             tmpfs  388M  4.0K  388M   1% /run/user/1000
/dev/mapper/vg1-lv1               ext4   6.9G   24K  6.5G   1% /lv1
/dev/mapper/vg1-lv2               xfs    2.0G   47M  1.9G   3% /lv2
root@xu-ubuntu:~# xfs_growfs /dev/vg1/lv2
meta-data=/dev/mapper/vg1-lv2    isize=512    agcount=4, agsize=128000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=512000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 512000 to 1310720
root@xu-ubuntu:~# df -Th | grep lv2
/dev/mapper/vg1-lv2               xfs    5.0G   69M  5.0G   2% /lv2
posted @ 2024-11-22 17:35  Linux小菜鸟  阅读(444)  评论(0编辑  收藏  举报