[排错] Linux 解决删除数据后依旧无法释放空间

解决方法:

步骤一:理解出现问题的原因

当删除某些数据时,此数据正在被某个进程使用,则这些数据需要 kill 掉这个进程后才能被删除掉

步骤二:查看目录的使用状态

# df -h

(注意:如果出现已用存储加剩余存储小于总存储的情况,就代表出现了被删除的数据正在被进程使用的情况 )

步骤三:查看对应目录里所有一级子目录的大小

# du -ah --max-depth=1

步骤四:查看是否有进程在使用正在被删除的数据

# lsof | grep delete

步骤五:kill 这些进程以让这些数据被成功删除

# kill -9 `lsof | grep delete | awk '{print $2}'` 

(注意:kill 进程有一定的风险,请小心执行)

[实验] Linux 硬盘的加密 (通过 crypt 实现)

纪念:站主于 2019 年 11 月完成了此开源实验,并将过程中的所有命令经过整理和注释以后,形成以下教程

步骤目录:

步骤一:硬盘加密后的注意事项

步骤二:生成一个新的分区
2.1 查看现有的分区
2.2 创建一个新的分区

步骤三:创建逻辑卷
3.1 创建卷组
3.2 创建逻辑卷

步骤四:给逻辑卷加密
4.1 给逻辑卷加密
4.2 解锁逻辑卷
4.3 格式化逻辑卷
4.4 锁住逻辑卷

内容五:自动挂载加密逻辑卷
5.1 修改系统自动挂载文件
5.2 创建一个映射器
5.3 创建随机密钥文件
5.4 将密钥文件设为只读为 root
5.5 将密码添到 luks 中,让密码立刻生效
5.6 测试挂载效果
5.6.1 挂载加密逻辑卷
5.6.2 测试加密效果

具体的操作步骤:

步骤一:硬盘加密后的注意事项

1) 加密后不能直接挂载
2) 加密后硬盘丢失也不用担心数据被盗
3) 加密后必须做映射才能挂载

步骤二:生成一个新的分区
2.1 查看现有的分区

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom  
vda    253:0    0   10G  0 disk 
└─vda1 253:1    0   10G  0 part /
vdb    253:16   0   10G  0 disk 

(补充:在这里是加了一个 vdb 硬盘用来进行分区并加密)

2.2 创建一个新的分区

# fdisk /dev/vdb
命令(输入 m 获取帮助):n
分区号 (1-8,默认 1):
起始 扇区 (0-20971440,默认 0):
Last 扇区 or +扇区 or +size{K,M,G,T,P} (0-20971440,默认 20971440):+5G
分区 1 已设置为 Linux native 类型,大小设为 5 GiB

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

2.2 查看新的分区

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom  
vda    253:0    0   10G  0 disk 
└─vda1 253:1    0   10G  0 part /
vdb    253:16   0   10G  0 disk 
└─vdb1 253:17   0    5G  0 part 

步骤三:创建逻辑卷
3.1 创建卷组

# vgcreate mysqldatavg /dev/vdb1
WARNING: sun signature detected on /dev/vdb1 at offset 508. Wipe it? [y/n]: y
  Wiping sun signature on /dev/vdb1.
  Physical volume "/dev/vdb1" successfully created.
  Volume group "mysqldatavg" successfully created

3.2 创建逻辑卷

# lvcreate -n mysqldatalv -L 1G mysqldatavg
  Logical volume "mysqldatalv" created.

步骤四:给逻辑卷加密
4.1 给逻辑卷加密

# cryptsetup luksFormat /dev/mapper/mysqldatavg-mysqldatalv

WARNING!
========
这将覆盖 /dev/mapper/mysqldatavg-mysqldatalv 上的数据,该动作不可取消。

Are you sure? (Type uppercase yes): YES
输入 /dev/mapper/mysqldatavg-mysqldatalv 的口令:
确认密码:

4.2 解锁逻辑卷

# cryptsetup luksOpen /dev/mapper/mysqldatavg-mysqldatalv mysqldata
输入 /dev/mapper/mysqldatavg-mysqldatalv 的口令:

(补充:这里的 mysqldata 是解锁后的硬件名称)

4.3 格式化逻辑卷

# mkfs.ext4 /dev/mapper/mysqldata

(注意:要先解锁了逻辑卷以后才能格式化逻辑卷)

4.4 锁住逻辑卷

# cryptsetup luksClose mysqldata

内容五:自动挂载加密逻辑卷
5.1 修改系统自动挂载文件

# vim /etc/fstab

添加以下内容:

......
/dev/mapper/mysqldata /var/lib/mysql ext4 defaults 0 0

5.2 创建一个映射器

# vim /etc/cypttab

添加以下内容:

......
mysqldata /dev/mapper/mysqldatavg-mysqldatalv /root/keyfile luks

(补充:这里的三个参数分别代表:虚拟设备名、真实设备、密码的存储文件)

5.3 创建随机密钥文件

# dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

5.4 将密钥文件设为只读

# chmod 0400 /root/keyfile

5.5 将密码添到 luks 中,让密码立刻生效

# cryptsetup luksAddKey /dev/mysqldatavg/mysqldatalv /root/keyfile
输入任意已存在的口令:

5.6 测试挂载效果
5.6.1 挂载加密逻辑卷

# mount -a

5.6.2 测试加密效果

# df -h

[排错] Linux 解决取消挂载目录时报错 “target is busy” 或者 “device is busy”

报错代码:

(1)target is busy
(2)device is busy

解决方法:

步骤目录:

步骤一:取消挂载时可能出现的报错

步骤二:查看要被取消挂载的目录正在被哪个进程使用
2.1 方法一:使用 fuser 命令查看此目录正在被哪个进程使用
2.1.1 安装 psmisc
2.1.2 查看要取消挂载的目录正在被哪个进程使用
2.2 方法二:使用 lsof 命令查看此目录正在被哪个进程使用

步骤三:杀死正在使用此目录的进程

步骤四:此时就可以取消挂载了

具体的操作步骤:

步骤一:取消挂载时可能出现的报错

当取消某一个目录的挂载时,出现以下报错,则说明此目录可能正在被使用:

(1)当使用 umount 命令时出现类似 “umount: /xxx: target is busy.” 等字样
(2)当使用 umount 命令时出现类似 “umount: /xxx: device is busy.” 等字样

步骤二:查看要被取消挂载的目录正在被哪个进程使用

(注意:以下两种方法二选一执行即可)

2.1 方法一:使用 fuser 命令查看此目录正在被哪个进程使用
2.1.1 安装 psmisc

# yum install psmisc

2.1.2 查看要取消挂载的目录正在被哪个进程使用

# fuser -mv /mnt/
                     USER        PID ACCESS COMMAND
/mnt:                root     kernel mount /mnt
                     root      11111 ..c.. bash

2.2 方法二:使用 lsof 命令查看此目录正在被哪个进程使用

# lsof /mnt/
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    11111 root  cwd    DIR   3,16       51   128 /mnt

步骤三:杀死正在使用此目录的进程

# kill -9 11111

步骤四:此时就可以取消挂载了

# umount /mnt/

[命令] Linux 命令组 lvm (逻辑卷管理)

内容目录:

内容一:LVM 的原理
1.1 LVM 的目的
1.2 LVM 的结构
1.2.1 LVM 的第一层
1.2.2 LVM 的第二层
1.2.3 LVM 的第三层

内容二:LVM 管理的命令集

内容三:快速部署 LVM 的思路

内容四:创建 LVM 逻辑卷的案例
4.1 创建卷组的格式
4.2 创建卷组的案例
4.3 创建逻辑卷的方案案例选择
4.3.1 案例一:创建指定大小的逻辑卷
4.3.2 案例二:创建大小是卷组剩余空间百分比的逻辑卷
4.3.3 案例三:创建大小是卷组全部空间百分比的逻辑据
4.4 查看已创建的逻辑卷 /dev/vg/vo
4.5 将新创建的逻辑卷格式化、挂载并使用

内容五:扩展 LVM 逻辑卷大小的案例
5.1 检查现有逻辑卷大小
5.2 检查逻辑卷所在卷组的剩余空间,看是否够逻辑卷扩展
5.3 当卷组的剩余空间不足时,要先扩展卷组(如果卷组的空间足够大,则可以跳过次步骤)
5.3.1 扩展卷组的格式
5.3.2 扩展卷组的案例
5.3.2.1 扩展卷组
5.3.2.2 查看扩展后的卷组
5.3.2.3 之后就可以扩展逻辑卷了
5.4 当卷组的剩余空间充足时,可直接扩展逻辑卷
5.4.1 扩展逻辑卷的格式
5.4.1.1 第一种格式:将逻辑卷扩展到指定大小
5.4.1.2 第二种格式:给逻辑卷添加指定大小的空间
5.4.1.3 第三种格式:将剩余空间的百分比添加给逻辑卷
5.4.1.4 补充:使用 -r 参数的格式
5.4.2 扩展逻辑卷的案例
5.4.2.1 扩展逻辑卷
5.4.2.1.1 案例一:将逻辑卷扩展到某个值
5.4.2.1.2 案例二:给逻辑卷添加某个值
5.4.2.1.3 案例三:将所有剩余空间添加给逻辑卷,并强制刷新文件系统容量
5.4.2.2 查看扩展后的逻辑卷
5.5 更新文件系统大小
5.5.1 更新文件系统大小的目的
5.5.2 查看文件系统的格式
5.5.3 刷新文件系统容量的格式
5.5.4 刷新文件系统的案例

内容六:创建 LVM 卷组时固定 PE 的大小的案例
6.1 创建卷组的时候固定 PE 大小
6.1.1 创建卷组时固定 PE 大小的格式
6.1.2 创建卷组时设置 PE 大小的案例
6.2 创建逻辑卷的时候指定 PE 个数
6.2.1 创建逻辑卷的时候指定 PE 个数的格式
6.2.2 创建逻辑卷的时候指定 PE 个数的案例
6.2.3 查看刚刚创建的制定了 PE 大小和个数的逻辑卷

具体的内容:

内容一:LVM 的原理
1.1 LVM 的目的

将零散的空闲存储整合成虚拟磁盘,再将虚拟的磁盘整合成虚拟的分区

1.2 LVM 的结构
1.2.1 LVM 的第一层

物理卷
Physical Volume

1.2.2 LVM 的第二层

卷组
Volume Group

1.2.3 LVM 的第三层

逻辑卷
Logical Volume

内容二:LVM 管理的命令集

function physical volume volume group logical volume
Scan     pvscan          vgscan       lvscan
Create   pvcreate        vgcreate     lvcreate
Display  pvdisplay       vgdisplay    lvdisplay
Remove   pvremove        vgremove     lvremove
Extend   / 

内容三:快速部署 LVM 的思路

(1)准备至少一个空闲分区

(2)创建卷组:

# vgcreate <volume group name> <free partition>

(3)创建逻辑卷:

# lvcreate -L <logical volume size> -n <logical volume name> <volume group name>

内容四:创建 LVM 逻辑卷的案例
4.1 创建卷组的格式

# vgcreate <volume group name> <free partition>......

4.2 创建卷组的案例

# vgcreate vg /dev/vdb2
......

(补充:这里以使用硬盘 /dev/vdb2 创建名为 vg 的卷组为例)

4.3 创建逻辑卷的方案案例选择

(注意:以下方案三选一即可,且只能三选一)

4.3.1 案例一:创建指定大小的逻辑卷

# lvcreate -L 200M -n vo vg
 Logical volume "vo" created

(补充:这里以使用 vg 卷组创建名为 vo 大小为 200M 的逻辑卷为例)

4.3.2 案例二:创建大小是卷组剩余空间百分比的逻辑卷

# lvcreate -l 80%Free -n vo vg
 Logical volume "vo" created

(补充:这里以使用 vg 卷组创建名为 vo 大小为卷组 vg 剩余空间 80% 的逻辑卷为例)

4.3.3 案例三:创建大小是卷组全部空间百分比的逻辑据

# lvcreate -l 80%VG -n vo vg
 Logical volume "vo" created

(补充:这里以使用 vg 卷组创建名为 vo 大小为卷组 vg 全部空间 80% 的逻辑卷为例)

4.4 查看已创建的逻辑卷 /dev/vg/vo

# lvscan
ACTIVE '/dev/vg/vo' [200.00 MiB] inherit

(补充:这里以查看 /dev/vg/vo 逻辑卷的大小为例)

4.5 将新创建的逻辑卷格式化、挂载并使用

(步骤略)

内容五:扩展 LVM 逻辑卷大小的案例
5.1 检查现有逻辑卷大小

# lvscan | grep vo
ACIVE '/dev/vg/vo' [200.00 MiB] inherit
......

(补充:这里以查看 /dev/vg/vo 逻辑卷的大小为例)

5.2 检查逻辑卷所在卷组的剩余空间,看是否够逻辑卷扩展

# vgdisplay vg | grep Free
 Free PE/Size 4/300.00 MiB

(补充:这里以查看 vg 卷组的大小为例)

5.3 当卷组的剩余空间不足时,要先扩展卷组(如果卷组的空间足够大,则可以跳过次步骤)
5.3.1 扩展卷组的格式

# vgextend <volume group name> <free partition>......

5.3.2 扩展卷组的案例
5.3.2.1 扩展卷组

# vgextend vg /dev/vdb3
 Physical volume "/dev/vdb3" successfully created
 Volume group "vg" successfully extended

(补充:这里以将 /dev/vdb 硬盘添加到 vg 卷组为例)

5.3.2.2 查看扩展后的卷组

# vgdisplay vg | grep 'Free'
 Free PE/Size 128/512.00 MiB

(补充:这里以查看 vg 卷组的剩余大小为例)

5.3.2.3 之后就可以扩展逻辑卷了

5.4 当卷组的剩余空间充足时,可直接扩展逻辑卷
5.4.1 扩展逻辑卷的格式
5.4.1.1 第一种格式:将逻辑卷扩展到指定大小

# lvextend -L <new size of logical volume> /dev/<volume group name>/<logical volume name>

5.4.1.2 第二种格式:给逻辑卷添加指定大小的空间

# lvextend -L +<the size of the logical volume added> /dev/<volume group name>/<logical volume name>

5.4.1.3 第三种格式:将剩余空间的百分比添加给逻辑卷

# lvextend -l +<percentage of remaining size>FREE /dev/<volume group name>/<logical volume name>

5.4.1.4 补充:使用 -r 参数的格式

# lvextend -r -l +<percentage of remaining size>FREE /dev/<volume group name>/<logical volume name>

(补充:如果使用 -r 参数就不需要再执行 5.5.3 刷新文件系统容量的格式)

5.4.2 扩展逻辑卷的案例
5.4.2.1 扩展逻辑卷
5.4.2.1.1 案例一:将逻辑卷扩展到某个值

# lvextend -L 300MiB /dev/vg/vo
 Extending logical volume vo to 300.00 MiB
 Logical volume vo successfully resized

(补充:这里以将 /dev/vg/vo 逻辑卷扩展到 300M 为例)

5.4.2.1.2 案例二:给逻辑卷添加某个值

# lvextend -L +100MiB /dev/vg/vo
 Extending logical volume vo to 300.00 MiB
 Logical volume vo successfully resized

(补充:这里以给 /dev/vg/vo 逻辑卷添加 100M 为例)

5.4.2.1.3 案例三:将所有剩余空间添加给逻辑卷,并强制刷新文件系统容量

# lvextend -r -l +100%FREE /dev/vg/vo
 Extending logical volume vo to 500.00 MiB
 Logical volume vo successfully resized

(补充:这里以将卷组所有剩余空间都添加给 /dev/vg/vo 逻辑卷为例)

5.4.2.2 查看扩展后的逻辑卷

# lvscan
......
ACTIVE '/dev/vg/vo' [300.00 MiB] inherit

5.5 更新文件系统大小
5.5.1 更新文件系统大小的目的

对于格式化过的逻辑卷,扩展后应该通知 Linux 内核,否则使用 df 等工具时看到的仍是扩展前的大小

5.5.2 查看文件系统的格式

# df -hT

5.5.3 刷新文件系统容量的格式

(1)EXT3/4 文件系统刷新的方法

# resize2fs /dev/<volume group name>/<logical volume name>

或者:

# resize2fs <logical volume mount point>

(2)XFS 文件系统刷新的方法

# xfs_growfs <logical volume mount point>

(3)btrfs 文件系统刷新的方法

# btrfs filesystem resize max <logical volume mount point>

5.5.4 刷新文件系统的案例

# resize2fs /dev/vg/vo
......

(补充:这里以刷新 /dev/vg/vo 逻辑卷为例)

内容六:创建 LVM 卷组时固定 PE 的大小的案例
6.1 创建卷组的时候固定 PE 大小
6.1.1 创建卷组时固定 PE 大小的格式

# vgcreate -s <PE size> <volume group name> <free partition>

6.1.2 创建卷组时设置 PE 大小的案例

# vgcreate -s 20MiB pevg /dev/vdb6 Physical volume "/dev/vdb4" 
successfully created Volume group "pevg" successfully created 

(补充:这里以使用 /dev/vdb6 硬盘创建名为 pevg PE 大小为 20M 的卷组为例)

6.2 创建逻辑卷的时候指定 PE 个数
6.2.1 创建逻辑卷的时候指定 PE 个数的格式

# lvcreate -l <number of PE> -n <logical volume name> <volume group name>

6.2.2 创建逻辑卷的时候指定 PE 个数的案例

# lvcreate -l 50 -n pelo pevg 
 Logical volume "pelo" created

(补充:这里以使用 pevg 卷组创建包含 50 个 PE 个数的逻辑卷为例)

6.2.3 查看刚刚创建的制定了 PE 大小和个数的逻辑卷

# lvscan
 ACTIVE '/dev/pevg/pelo' [1000.00 MiB] inherit

(补充:会发现它的大小是精确的)