Linux硬盘分区与RAID存储

Linux文件系统基本管理

查找系统中的文件

locate

locate 命令根据文件名及其路径,在 mlocate 数据库中查找文件,并返回结果。数据库中存放文件和文件路径信息。

常规用户查找时,返回的结果仅包含用户有读取权限的目录树中匹配项。

查找文件前,需要root用户手动执行updatedb命令更新mlocate数据库。

[root@centos7 ~]# updatedb

locate命令语法:

locate [OPTION]... [PATTERN]...

常用选项:

  • -b, --basename

  • -i, --ignore-case

  • -c, --count

  • -r, --regexp

示例:

[root@centos7 ~]# yum install -y httpd
# 安装后,未跟新数据库,所以检索不到
[root@centos7 ~]# locate httpd.conf
# 更新后查找
[root@centos7 ~]# updatedb
[root@centos7 ~]# locate httpd.conf
/etc/httpd/conf/httpd.conf
/usr/lib/tmpfiles.d/httpd.conf
# -b选项 查找
[root@centos7 ~]# locate -b httpd
# 扩展
[root@centos7 ~]# basename /usr/share/doc
doc
[root@centos7 ~]# dirname /usr/share/doc
/usr/share
# -i选项 忽略大小写
[root@centos7 ~]# locate PASSWD
/etc/PASSWD
[root@centos7 ~]# locate -i PASSWD
# -c选项 返回找到的数量
[root@centos7 ~]# locate -b -c PASSWD
34
# -r选项 正则表达式匹配查找
[root@centos7 ~]# locate -r 'http.*conf'
find

find 命令在本地文件系统中执行实时查找文件。使用find命令的用户对文件夹必须有读取和执行

权限。

语法:

find [path] [expression] [action]
  • path,是查询路径,如果没有指定文件夹,将会查找当前目录及子目录。

  • expression,是查询条件表达式。

  • action,是找到文件后采取的动作。

根据文件 name 查找
[root@centos7 ~]# touch /etc/PASSWD
[root@centos7 ~]# find /etc/ -name passwd
/etc/pam.d/passwd
/etc/passwd
[root@centos7 ~]# find /etc/ -name '*passwd*'
/etc/security/opasswd
/etc/pam.d/passwd
/etc/passwd
/etc/passwd-
[root@centos7 ~]# find /etc/ -iname passwd
/etc/pam.d/passwd
/etc/passwd
/etc/PASSWD
根据文件 type 查找

-type 根据文件类型查找,支持文件类型:

  • b,block (buffered) special。

  • c,character (unbuffered) special。

  • d,directory。

  • p,named pipe (FIFO)。

  • f,regular file。

  • l,symbolic link。

  • s,socket。

根据文件 owner 查找
  • -user、-uid,属于特定用户。
[root@centos7 ~]# id laoma
uid=1000(laoma) gid=1000(laoma) groups=1000(laoma)
[root@centos7 ~]# find / -user laoma
[root@centos7 ~]# find / -uid 1000
  • -group、-gid,属于特定组
[root@centos7 ~]# grep wheel /etc/group
wheel:x:10:
[root@centos7 ~]# find / -group wheel
[root@centos7 ~]# find / -gid 10
  • -nouser,不属于任何用户;-nogroup,不属于任何组
# 查找系统中不属于任何用户或者不属于任何组的文件
[root@centos7 ~]# find / -nouser -o -nogroup
根据文件 perm 查找
# 准备文件
[root@centos7 ~]# mkdir lab;cd lab
[root@centos7 lab]# touch file-{1..3}
[root@centos7 lab]# ls -l file*
-rw-r--r--. 1 root root 0 Dec 24 20:28 file-1
-rw-r--r--. 1 root root 0 Dec 24 20:28 file-2
-rw-r--r--. 1 root root 0 Dec 24 20:28 file-3
  • perm mode,查找文件权限为mode的文件。
[root@centos7 lab]# chmod 764 file-1
# 查找文件权限为764的文件
[root@centos7 lab]# find -perm 764 | xargs ls -l
-rwxrw-r--. 1 root root 0 Dec 24 20:28 ./file-1
  • -perm -mode,例如:mode为764,则ugo必须同时满足的最小权限:user至少为7、group至少为6、other为4。
[root@centos7 lab]# chmod 777 file-1
[root@centos7 lab]# chmod 764 file-2
[root@centos7 lab]# chmod 760 file-3
[root@centos7 lab]# find . -perm -764 | xargs ls -l
-rwxrwxrwx. 1 root root 0 Dec 24 20:28 ./file-1
-rwxrw-r--. 1 root root 0 Dec 24 20:28 ./file-2
# 0作为通配符,表示不匹配对应权限位。
# 查找系统中具有suid权限的文件
[root@centos7 lab]# find / -perm -4000
# 查找系统中同时具有特殊权限的文件:suid和sgid
[root@centos7 lab]# find / -perm -6000 2>/dev/null |xargs ls -l
-rwsr-sr-x. 1 abrt abrt 15344 Oct  2  2020 /usr/libexec/abrtaction-install-debuginfo-to-abrt-cache
  • -perm /mode,例如mode为764,则ugo只要有一个满足即可:user至少为7、group至少为6、other至少为4。
[root@centos7 lab]# chmod a=- file-1
[root@centos7 lab]# chmod uo=-,g=rwx file-2
[root@centos7 lab]# chmod ug=-,o=r file-3
[root@centos7 lab]# find -name 'file-*' -perm /764| xargs ls -l
----rwx---. 1 root root 0 Dec 24 20:28 ./file-2
-------r--. 1 root root 0 Dec 24 20:28 ./file-3
# 查找系统中具有特殊权限的文件:suid、sgid、sticky
[root@centos7 lab]# find / -perm /7000
# 查找系统中具有特殊权限的文件:suid或者sgid
[root@centos7 lab]# find / -perm /6000
  • -readable -writable -executable,文件具有可读、可写、可执行。
根据文件 size 查找

单位 c(字节)、k(KiB)、M(MiB)、G(GiB)

# 大小等于10M
[root@centos7 ~]# find -size 10M
# 大小大于10G
[root@centos7 ~]# find -size +10G
# 大小小于10k
[root@centos7 ~]# find -size -10k
# 大小等于1M
[root@centos7 ~]# find -size 1M
# 注意:size会取整为1个单位,所以find -size 1M结果包含小于1M的文件。
# 可以使用1024k取代1M
[root@centos7 ~]# find -size 1024k

根据文件 time 查找

  • -amin, -cmin, -mmin 单位1分钟。

  • -atime, -ctime, -mtime 单位24小时。

  • -newer file,比file新的文件。

# 10分钟前(正好10分钟)
[root@centos7 ~]# find -amin 10
# 10分钟以前(大于10分钟)
[root@centos7 ~]# find -amin +10
# 10分钟以内(小于10分钟)
[root@centos7 ~]# find -amin -10
根据文件硬链接数和 inum 查找
# 硬链接数等于、大于、小于3的文件
[root@centos7 ~]# find -links 3
[root@centos7 ~]# find -links +3
[root@centos7 ~]# find -links -3
# inode为67160130的文件
[root@centos7 ~]# ls -i /etc/fstab
67160130 /etc/fstab
[root@centos7 ~]# find / -inum 67160130| xargs ls -i
67160130 /etc/fstab
多条件表达式
  • 逻辑与: expr1 -a expr2 或者 expr1 expr2
[root@centos7 lab]# find . -name 'file-*' -perm /764
  • 逻辑或:expr1 -o expr2
# 查找系统中不属于任何用户或者不属于任何组的文件
[root@centos7 ~]# find / -nouser -o -nogroup
# 例如
[root@centos7 ~]# find / -perm /7000
# 等效与
[root@centos7 ~]# find / -perm -4000 -o -perm -2000 -o -perm -1000
  • 逻辑非:! expr
[root@centos7 ~]# find / ! -size -200M 2>/dev/null
/proc/kcore
/proc/59432/task/59432/fd/5
/proc/59432/task/59432/fdinfo/5
/proc/59432/fd/6
/proc/59432/fdinfo/6
[root@centos7 ~]# ls -lh /proc/kcore
-r--------. 1 root root 128T Dec 24 22:00 /proc/kcore
action
  • -delete,查出找到的文件。
[root@centos7 ~]# find / -name PASSWD
/etc/PASSWD
[root@centos7 ~]# find / -name PASSWD -delete
[root@centos7 ~]# find / -name PASSWD
  • -ls,相当于 ls -dils 查看找到的文件.
[root@centos7 ~]# find /etc/ -name passwd
/etc/pam.d/passwd
/etc/passwd
[root@centos7 ~]# find /etc/ -name passwd -ls
67584593    4 -rw-r--r--   1 root     root          188 Apr  1  2020
/etc/pam.d/passwd
69030856    4 -rw-r--r--   1 root     root         2315 Dec 24 19:59 
/etc/passwd
  • -exec command ;,找到文件后,执行相应的command。
[root@centos7 ~]# find /etc/ -name passwd -exec echo haha \;
haha
haha
  • -exec command {} ;,找到文件后,可以在命令中对文件操作。
[root@centos7 ~]# find / -inum 67160130
/etc/fstab
# 将inode为67160130的所有文件复制到当前目录
[root@centos7 ~]# mkdir findfiles
[root@centos7 ~]# find / -inum 67160130 -exec cp -a {} ./findfiles 
\;
[root@centos7 ~]# ls findfiles/fstab
fstab

Linux 硬盘分区管理

硬盘为什么要分区?

  • 将操作系统文件与用户文件分隔开,避免应用数据太多撑满操作系统盘。

  • 限制应用或用户的可用空间。

  • 如果一个分区出现逻辑损坏,仅损坏该分区数据而不影响硬盘上其他分区。

  • 用于创建交换分区。

  • 限制磁盘空间使用,以提高诊断工具和备份镜像的性能。

  • 便于定制文件系统,例如有的文件系统存放大量小文件,有的文件系统存放大量大文件。

MBR 分区方案

  • 该方案支持最多4个主分区。

  • 在 Linux系统上,管理员可以使用扩展分区和逻辑分区来创建最多 15****个分区。逻辑分区是可以格式化(format),扩展分区是不可以格式化。

  • MBR 记录用4个字节(1byte=8bit)存储分区的总扇区数,最大能表示2的32次方的扇区个数,按每扇区512字节计算,每个分区最大不能超过 2 TiB

类比为:笔记本只有4个usb接口,如果不够用,则将第四个usb接口外接扩展坞,由扩展坞提供多个usb接口。

通常,我们将磁盘第一个扇区称为主引导扇区,位于硬盘的柱面0、磁头0、扇区1的位置,这一扇区包含MBR引导代码,承担系统启动职能。它不属于磁盘上任何分区,因而分区空间内的格式化命令不能清除主引导记录的任何信息。

主引导扇区由三个部分组成:

  • 引导程序(占446个字节),硬盘启动时将系统控制权转给分区表中的某个操作系统。

  • 磁盘分区表项(DPT,Disk Partition Table),由四个分区表项构成(每个16个字节)。

  • 结束标志(占2个字节),其值为AA55(十六进制)。

fdisk 工具

fdisk 工具可用于管理采用 MBR 分区方案的磁盘,用户可以根据实际情况进行划分分区

fdisk 命令语法
[root@centos7 ~]# fdisk -h
Usage:
 fdisk [options] <disk>   change partition table
 fdisk [options] -l <disk> list partition table(s)
 fdisk -s <partition>     give partition size(s) in blocks
Options:
-b <size>             sector size (512, 1024, 2048 or 4096)
-c[=<mode>]           compatible mode: 'dos' or 'nondos' (default)
-h                   print this help text
-u[=<unit>]           display units: 'cylinders' or 'sectors'
(default)
-v                   print program version
-C <number>           specify the number of cylinders
-H <number>           specify the number of heads
-S <number>           specify the number of sectors per track

除了使用-l选项查看分区表,其他选项暂时都不用。

查看分区

fdisk工具大部分操作通过交互式完成,出了查看分区表。

​ DOS disklabel 指的硬盘管理方式是MBR。

​ 我们使用上一章准备的一块硬盘/dev/sdb。

# 方法1:
[root@centos7 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x78ceaffe
   Device Boot     Start         End     Blocks   Id System
/dev/sdb1            2048    41943039    20970496   83 Linux
# 方法2:
[root@centos7 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
# 输入m,查看帮助信息
Command (m for help): `m`
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)
# 输入p,打印分区表
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x78ceaffe
   Device Boot     Start         End     Blocks   Id System
/dev/sdb1            2048    41943039    20970496   83 Linux
# 输入q,退出管理
Command (m for help): q
创建分区
# 输入n,创建一个新分区
Command (m for help): `n`
# 选择分区类型
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
# 直接回车,选择默认分区类型:primary
Select (default p): `回车`
Using default response p
# 直接回车,分区号,使用默认值1
Partition number (1-4, default 1): 
# 直接回车,设置分区起始位置为:默认值2048扇区,也就是1M位置。
First sector (2048-41943039, default 2048): 
Using default value 2048
# 设置分区结束位置,输入+2G,也就是起始位置之后2
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 
41943039): +2G
Partition 1 of type Linux and of size 2 GiB is set
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x78ceaffe
   Device Boot     Start         End     Blocks   Id System
/dev/sdb1            2048     4196351     2097152   83 Linux
# 输入w,保存更改并退出
# 输入q,不保存更改并退出
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# 再次验证分区表变化
[root@centos7 ~]# lsblk /dev/sdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb      8:16   0 20G  0 disk 
`-sdb1   8:17   0   2G 0 part

注意:如果此时分区表未生成,执行以下命令,通知kernel重新生成分区表。有时候重启系统才会生成最新分区表。

[root@centos7 ~]# partprobe
删除分区
[root@centos7 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
# 输入p,打印分区表
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x78ceaffe
   Device Boot     Start         End     Blocks   Id System
/dev/sdb1            2048    41943039    20970496   83 Linux
# 输入d,删除分区,因为只有1个分区,所以自动删除了第一个分区
Command (m for help): `d`
Selected partition 1
Partition 1 is deleted
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x78ceaffe
   Device Boot     Start         End     Blocks   Id System

如果硬盘空间比较大,需要的文件系统数量超过4个,那么就需要借助扩展分区创建逻辑分区了。

如下示例,创建第4个分区的时候,类型选择扩展分区;创建第5个分区的时候,类型选择逻辑分区。

[root@centos7 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
# 再次创建一个容量为3G的分区
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): 
Using default response p
Partition number (2-4, default 2): 
First sector (4196352-41943039, default 4196352): 
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-41943039, default 
41943039): +3G
Partition 2 of type Linux and of size 3 GiB is set
# 再次创建一个容量为4G的分区
Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): 
Using default response p
Partition number (3,4, default 3): 
First sector (10487808-41943039, default 10487808): 
Using default value 10487808
Last sector, +sectors or +size{K,M,G} (10487808-41943039, default 
41943039): +4G
Partition 3 of type Linux and of size 4 GiB is set
# 创建第4个分区的时候,选择扩展分区,并且使用剩余所有容量
Command (m for help): n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
  Select (default e): 
Using default response e
Selected partition 4
First sector (18876416-41943039, default 18876416): 
Using default value 18876416
Last sector, +sectors or +size{K,M,G} (18876416-41943039, default 
41943039): 
Using default value 41943039
Partition 4 of type Extended and of size 11 GiB is set
# 创建第5个分区:在扩展分区中,创建逻辑分区,分配5G容量
Command (m for help): n
All primary partitions are in use
Adding logical partition 5
First sector (18878464-41943039, default 18878464): 
Using default value 18878464
Last sector, +sectors or +size{K,M,G} (18878464-41943039, default 
41943039): +5G
Partition 5 of type Linux and of size 5 GiB is set
Command (m for help): p         
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x78ceaffe
   Device Boot     Start         End     Blocks   Id System
/dev/sdb1            2048     4196351     2097152   83 Linux
/dev/sdb2         4196352    10487807     3145728   83 Linux
/dev/sdb3        10487808    18876415     4194304   83 Linux
/dev/sdb4        18876416    41943039    11533312    5 Extended
/dev/sdb5        18878464    29364223     5242880   83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# 查看分区表
[root@centos7 ~]# lsblk /dev/sdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb      8:16   0 20G  0 disk 
|-sdb1   8:17   0   2G  0 part 
|-sdb2   8:18   0   3G  0 part 
|-sdb3   8:19   0   4G  0 part 
|-sdb4   8:20   0   1K  0 part 
|-sdb5   8:21   0   5G  0 part 

创建分区演示完成,只保留1个分区,多余的删除。

[root@centos7 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Partition number (1-5, default 5): 
Partition 5 is deleted
Command (m for help): d
Partition number (1-4, default 4): 
Partition 4 is deleted
Command (m for help): d
Partition number (1-3, default 3): 
Partition 3 is deleted
Command (m for help): d
Partition number (1,2, default 2): 
Partition 2 is deleted
Command (m for help): d
Selected partition 1
Partition 1 is deleted
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
非交互方式管理

示例1:创建一个分区

# 将要执行的fdisk命令行写入到一个文本文件
[root@centos7 ~]# vim fdisk-create.txt
n
p
1
2048
+2G
p
w
# 执行
[root@centos7 ~]# fdisk /dev/sdb < fdisk-create.txt
[root@centos7 ~]# lsblk /dev/sdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb      8:16   0 20G  0 disk 
|-sdb1   8:17   0   2G  0 part

示例2:删除一个分区

# 将要执行的fdisk命令行写入到一个文本文件
[root@centos7 ~]# vim fdisk-delete.txt
d
p
w
# 执行
[root@centos7 ~]# fdisk /dev/sdb < fdisk-delete.txt
[root@centos7 ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb    8:16   0 20G  0 disk

GPT 分区方案

GPT是运行统一可扩展固件接口(UEFI)固件系统上硬盘分区表的标准。

  • MBR分区方案只能管理最大2TiB分区和磁盘。全局唯一标识分区表(GPT,GUID Partition Table)使用8个字节(1byte=8bit)存储分区的总扇区数,可支持最多18 ZiB(=264512 Byte),即**18***亿**太字节的分区和磁盘。

  • MBR分区方案支持最多15个分区。GPT分区方案最多可提供128****个分区

  • GPT 提供分区表信息的冗余

  • LBA0(保护性MBR),分为两个部分:

    • 第一部分是与MBR中446****字节相似的区块,用于存放第一阶段的启动引导程序

    • 第二部分是与MBR分区表记录区对应,该区域存储一个特殊标识符0xEE,用于表示该磁盘为GPT****格式。若磁盘管理程序(比较老的软件)无法识别该磁盘,不能修改这个分区信息,进一步保护磁盘。

  • LBA1(GPT表头记录),记录了分区表自身的位置和大小,同时也记录了前面提到备份用的GPT分区所在位置(最后34个LBA),还放置了分区表的校验码(CRC32),校验码的作用是让操作系统判断GPT的正确与否,倘若发现错误则可以从备份的GPT中恢复正常运行。

  • LBA2-33,记录分区信息,每个LBA可以提供4组的分区记录,默认情况下可以有4×32=128组分区记录。因为每个LBA都有512字节,所以每组分区记录所占128字节,除去每组记录需要的标识符和相关记录信息外,GPT在每组记录中提供了64位记载分区的扇区总数。虽然GPT最大支持128个分区,但是实际使用过程中分区超过第120个会出现无法格式化使用的情况。

gdisk 工具

gdisk工具用于管理采用GPT分区方案的磁盘分区,主要用于管理磁盘容量超过2T的磁盘。

gdisk命令语法
gdisk [ -l ] device
查看分区表
[root@centos7 ~]# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.10
# 这里显示识别到了MBR分区方案
Partition table scan:
 MBR: MBR only
 BSD: not present
 APM: not present
 GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. 
***************************************************************
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 1038836E-C6BD-48D3-A490-8FFF2133146B
Partition table holds up to 128 entries
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
转换分区表方案

gdisk工具用于管理gpt分区,所以我们需要将磁盘的分区管理方案由MBR转换成GPT。

[root@centos7 ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
 MBR: MBR only
 BSD: not present
 APM: not present
 GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************
# 输入?,查看帮助信息。gdisk管理命令跟fdisk很相似。
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
# 输入o,将磁盘的分区管理方案由MBR转换成GPT
Command (? for help): o  
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y
# 输入p,查看分区表
Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 99FE6E5F-8316-428D-BA81-D824C786CC43
Partition table holds up to 128 entries
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
# 输入w,保存更改并退出
# 输入q,不保存更改并退出
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.
创建分区
[root@centos7 ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10
# 这里识别到了GPT分区方案
Partition table scan:
 MBR: protective
 BSD: not present
 APM: not present
 GPT: present
Found valid GPT with protective MBR; using GPT.
# 输入n,创建新分区
Command (? for help): `n`
# 设置分区ID
Partition number (1-128, default 1): `回车`
# 设置分区起始位置
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: `回车`
# 设置分区结束位置
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: 
`+2G`
Current type is 'Linux filesystem'
# 设置分区类型,输入L查看所有分区类型
Hex code or GUID (L to show codes, Enter = 8300): `L`
0700 Microsoft basic data 0c01 Microsoft reserved    2700 Windows RE   
       
3000 ONIE boot             3001 ONIE config           4100 PowerPC PReP 
boot   
4200 Windows LDM data      4201 Windows LDM metadata  7501 IBM GPFS     
       
7f00 ChromeOS kernel       7f01 ChromeOS root         7f02 ChromeOS 
reserved   
8200 Linux swap            8300 Linux filesystem      8301 Linux 
reserved      
8302 Linux /home           8400 Intel Rapid Start     8e00 Linux LVM   
        
a500 FreeBSD disklabel     a501 FreeBSD boot         a502 FreeBSD swap 
       
a503 FreeBSD UFS           a504 FreeBSD ZFS           a505 FreeBSD 
Vinum/RAID  
a580 Midnight BSD data     a581 Midnight BSD boot     a582 Midnight BSD 
swap   
a583 Midnight BSD UFS     a584 Midnight BSD ZFS     a585 Midnight BSD 
Vinum
a800 Apple UFS             a901 NetBSD swap           a902 NetBSD FFS   
       
a903 NetBSD LFS           a904 NetBSD concatenated   a905 NetBSD 
encrypted    
a906 NetBSD RAID           ab00 Apple boot           af00 Apple 
HFS/HFS+      
af01 Apple RAID           af02 Apple RAID offline   af03 Apple label 
        
af04 AppleTV recovery     af05 Apple Core Storage   be00 Solaris boot 
       
bf00 Solaris root         bf01 Solaris /usr & Mac Z bf02 Solaris swap 
       
bf03 Solaris backup       bf04 Solaris /var         bf05 Solaris 
/home       
bf06 Solaris alternate se bf07 Solaris Reserved 1   bf08 Solaris 
Reserved 2  
bf09 Solaris Reserved 3   bf0a Solaris Reserved 4   bf0b Solaris 
Reserved 5  
c001 HP-UX data           c002 HP-UX service         ea00 Freedesktop 
$BOOT   
eb00 Haiku BFS             ed00 Sony system partitio ed01 Lenovo 
system partit
# 输入回车继续查看
Press the <Enter> key to see more codes:`回车`
ef00 EFI System           ef01 MBR partition scheme ef02 BIOS boot 
partition 
fb00 VMWare VMFS           fb01 VMWare reserved       fc00 VMWare kcore 
crash p
fd00 Linux RAID            
# 输入回车,选择默认分区类型
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'
# 输入p,查看分区表
Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 1A3D170A-56FC-4655-8B9C-01E1B89294FE
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 37748669 sectors (18.0 GiB)
Number Start (sector)   End (sector) Size       Code Name
   1            2048         4196351   2.0 GiB     8300 Linux 
filesystem
更改分区名称
# 输入c,修改分区ID为1的分区名
Command (? for help): c
Using 1
# 输入新名称
Enter name: data01
# 查看分区表
Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 1A3D170A-56FC-4655-8B9C-01E1B89294FE
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 37748669 sectors (18.0 GiB)
Number Start (sector)   End (sector) Size       Code Name
   1            2048         4196351   2.0 GiB     8300 data01
查看分区详细信息
Command (? for help): i
Using 1
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux 
filesystem)
Partition unique GUID: 19AE5CDC-1AB2-4EBA-B9E2-AE9E7BF42653
First sector: 2048 (at 1024.0 KiB)
Last sector: 4196351 (at 2.0 GiB)
Partition size: 4194304 sectors (2.0 GiB)
Attribute flags: 0000000000000000
Partition name: 'data01'
删除分区
# 输入d,删除分区ID为1的分区
Command (? for help): d
Using 1
Command (? for help): p   
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 1A3D170A-56FC-4655-8B9C-01E1B89294FE
Partition table holds up to 128 entries
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): 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.
wipefs 工具

作用:清除磁盘分区表信息。

注意:数据无价,操作需谨慎,最好提前备份

# 清除未挂载磁盘的分区表
[root@centos7 ~]# wipefs -a /dev/sdb
# 禁止使用 -f 强制清除分区表
[root@centos7 ~]# wipefs -fa /dev/sdb
parted 工具

parted 工具既可以管理采用MBR分区方案的磁盘,又可以管理采用GPT分区方案的磁盘。

parted 命令同时支持交互式操作和非交互式操作(编写脚本)。

我们先来看看交互式操作。

操作流程:

  1. 查看分区表。如果是未初始化硬盘,创建分区。
  2. 设置单位(MiB)
  3. 创建分区
  4. 调整分区大小
  5. 调整分区类型
  6. 删除分区
查看分区表
[root@centos7 ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
# 查看帮助,输入help
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) `help`                                                            
 align-check TYPE N                       check partition N for
TYPE(min|opt) alignment
 help [COMMAND]                           print general help, or help 
on COMMAND
 mklabel,mktable LABEL-TYPE               create a new disklabel 
(partition table)
 mkpart PART-TYPE [FS-TYPE] START END     make a partition
 name NUMBER NAME                         name partition NUMBER as 
NAME
 print [devices|free|list,all|NUMBER]     display the partition table, 
available devices,
       free space, all found partitions, or a particular partition
 quit                                     exit program
 rescue START END                         rescue a lost partition near 
START and END
  
 resizepart NUMBER END                   resize partition NUMBER
  rm NUMBER                               delete partition NUMBER
 select DEVICE                           choose the device to edit
 disk_set FLAG STATE                     change the FLAG on selected 
device
 disk_toggle [FLAG]                       toggle the state of FLAG on 
selected device
  set NUMBER FLAG STATE                   change the FLAG on partition 
NUMBER
 toggle [NUMBER [FLAG]]                   toggle the state of FLAG on 
partition NUMBER
 unit UNIT                                set the default unit to UNIT
 version                                 display the version number 
and copyright
       information of GNU Parted
# 查看分区表,输入 print
(parted) `print`                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
设置单位

parted工具默认单位是MB(103K),设置为MiB(2 10KiB)

(parted) unit MiB
管理 MBR 磁盘

设置磁盘分区管理方案

# 输入mklabel或mktable设置磁盘分区管理方案
# 设置分区方案为msdos,也就是MBR,输入mklabel msdos
(parted) `mklabel msdos`                                                    
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?
# 确认更改,输入y
Yes/No? `y`                                                                 
(parted) print                                                           
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
# 分区表已改成msdos
Partition Table: `msdos`
Disk Flags: 
Number Start End Size Type File system Flags

**注意:**parted命令所做更改立刻生效。

创建分区
# 创建分区,输入 mkpart
(parted) `mkpart`
# 设置分区类型,输入 primary
Partition type? primary/extended? `primary`                     
# 设置分区文件系统类型,输入 xfs,实际不生效,格式化文件系统仍需手动操作
File system type? [ext2]? `xfs`                                 
# 设置分区起始位置,输入 1
Start? `1`
# 设置分区结束位置,输入 2049
End? `2049`                                                             
(parted) `print`                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number Start   End     Size     Type     File system Flags
1      1.00MiB 2049MiB 2048MiB primary xfs
扩展分区
# 1 代表分区号,4097代表分区结束位置
(parted) resizepart 1 4097                                               
(parted) print                                                           
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number Start   End     Size     Type     File system Flags
1      1.00MiB 4097MiB 4096MiB primary xfs
删除分区
# 1 代表分区号
(parted) rm 1                                                           
(parted) print                                                         
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number Start End Size Type File system Flags
免交互操作
# 设置磁盘分区管理方案
[root@centos7 ~]# parted /dev/sdb mklabel msdos
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? y                                                               
Information: You may need to update /etc/fstab.
# 查看分区
[root@centos7 ~]# parted /dev/sdb unit MiB print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number Start End Size Type File system Flags
# 创建分区
[root@centos7 ~]# parted /dev/sdb unit MiB mkpart primary 1 2049
Information: You may need to update /etc/fstab.
[root@centos7 ~]# parted /dev/sdb unit MiB print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number Start   End     Size     Type     File system Flags
1      1.00MiB 2049MiB 2048MiB primary xfs
# 扩展分区
[root@centos7 ~]# parted /dev/sdb unit MiB resizepart 1 5121
Information: You may need to update /etc/fstab.
[root@centos7 ~]# parted /dev/sdb unit MiB print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number Start   End     Size     Type     File system Flags
1      1.00MiB 5121MiB 5120MiB primary xfs
# 删除分区
[root@centos7 ~]# parted /dev/sdb rm 1
Information: You may need to update /etc/fstab.
[root@centos7 ~]# parted /dev/sdb unit MiB print                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number Start End Size Type File system Flags
管理 GPT 磁盘

管理GPT磁盘基本与管理MBR磁盘一致,除了创建分区。

设置磁盘分区管理方案

# 设置分区方案为gpt,输入mklabel gpt
(parted) `mklabel gpt`                                                    
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? y                                                               
(parted) print                                                         
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
# 分区表已改成gpt
Partition Table: `gpt`
Disk Flags: 
Number Start End Size File system Name Flags
创建分区
(parted) unit MiB                                                       
(parted) mkpart                                                   
# 设置分区名
Partition name? []? data01                                             
File system type? [ext2]? xfs
Start? 1                                                               
End? 2049                                                               
(parted) print                                                          
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number Start   End     Size     File system Name   Flags
1      1.00MiB 2049MiB 2048MiB xfs         data01
扩展分区
(parted) resizepart 1 5121                                             
(parted) print                                                   
   
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number Start   End     Size     File system Name   Flags
1      1.00MiB 5121MiB 5120MiB xfs         data01
删除分区
(parted) rm 1                                                           
(parted) print                                                           
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number Start End Size File system Name Flags
免交互操作
# 设置磁盘分区管理方案
[root@centos7 ~]# parted /dev/sdb mklabel gpt
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? y                                                                 
Information: You may need to update /etc/fstab.
# 查看分区
[root@centos7 ~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number Start End Size File system Name Flags
# 创建分区
[root@centos7 ~]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049
Information: You may need to update /etc/fstab.
[root@centos7 ~]# parted /dev/sdb unit MiB print                         
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number Start   End     Size     File system Name   Flags
1      1.00MiB 2049MiB 2048MiB xfs         data01
# 扩展分区
[root@centos7 ~]# parted /dev/sdb unit MiB resizepart 1 5121
Information: You may need to update /etc/fstab.
[root@centos7 ~]# parted /dev/sdb unit MiB print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number Start   End     Size     File system Name   Flags
1      1.00MiB 5121MiB 5120MiB xfs         data01
# 删除分区
[root@centos7 ~]# parted /dev/sdb rm 1
Information: You may need to update /etc/fstab.
[root@centos7 ~]# parted /dev/sdb unit MiB print                         
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number Start End Size File system Name Flags

文件系统持久化挂载

环境准备

利用 parted 创建一个分区,并格式化为xfs文件系统。

[root@centos7 ~]# parted /dev/sdb mklabel gpt
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? y                                                               
  
Information: You may need to update /etc/fstab.
[root@centos7 ~]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049     
Information: You may need to update /etc/fstab.
[root@centos7 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1    isize=512    agcount=4, agsize=131072 blks
         =             sectsz=512   attr=2, projid32bit=1
         =             crc=1        finobt=0, sparse=0
data     =             bsize=4096   blocks=524288, 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
# 如果格式化时候,提示存在文件系统,则需要-f选项强制格式化
[root@centos7 ~]# mkfs.xfs /dev/sdb1                             
mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
[root@centos7 ~]# mkfs.xfs -f /dev/sdb1
持久化挂载

当服务器重启时,系统不会再次将文件系统自动挂载到目录树上,用户无法访问。为了确保系统在启动时自动挂载文件系统, 需要在 /etc/fstab文件中添加一个条目。

/etc/fstab 是以空格分隔的文件,每行具有六个字段。

  • **第一个字段指定设备。**可以使用UUID或device来指定设备

  • **第二个字段是目录挂载点。**通过它可以访问目录结构中的块设备。挂载点必须存在;如果不存在,请使用mkdir命令进行创建。

  • 第三个字段包含文件系统类型,如xfs或ext4 。

  • 第四个字段是挂载选项,以逗号分隔的。 defaults是一组常用选项。详细信息参考mount(8) 。

  • 第五个字段指定dump命令是否备份设备。

  • 第六个字段指定fsck顺序字段,决定了在系统启动吋是否应运行fsck命令,以验证文件系统是否干净。 该字段中的值指示了 fsck的运行顺序。 对于XFS文件系统, 请将该字段设为0 ,因为XFS并不使用fsck来检查自己的文件系统状态。 对于ext4 文件系统,如果是根文件系统, 请将该字段设 为 1 ; 如果是其他ext4 文件系统, 则将该字段设为2。 这样, fsck就会先处理根文件系统,然后同步检查不同磁盘上的文件系统,并按顺序检查同一磁盘上的文件系统。

示例:

[root@centos7 ~]# blkid /dev/sdb1
/dev/sdb1: UUID="f5c35f10-0274-45af-b044-73694989fe01" TYPE="xfs"
PARTLABEL="data01" PARTUUID="432d7d79-1a08-4429-bf38-7ab1444a0ab9"
[root@centos7 ~]# mkdir /data01
[root@centos7 ~]# vim /etc/fstab
# 最后一行增加一个条目
UUID="f5c35f10-0274-45af-b044-73694989fe01" /data01 xfs defaults 0 0
# 使用如下命令立刻挂载
[root@centos7 ~]# mount /data01
# 或者
[root@centos7 ~]# mount /dev/sdb1
# 验证
[root@centos7 ~]# df -h /data01
Filesystem     Size Used Avail Use% Mounted on
/dev/sdb1       2.0G   33M  2.0G   2% /data01
# 重启系统验证
[root@centos7 ~]# reboot
[root@centos7 ~]# df -h /data01
Filesystem     Size Used Avail Use% Mounted on
/dev/sdb1       2.0G   33M  2.0G   2% /data01
取消持久化挂载

删除/etc/fstab中对应条目即可。

综合案例:文件系统空间不足

情况1:大量的大文件占用空间

准备环境

[root@centos7 ~]# parted /dev/sdb mklabel gpt
[root@centos7 ~]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049
[root@centos7 ~]# mkfs.xfs -f /dev/sdb1
[root@centos7 ~]# mkdir /myapp-1
[root@centos7 ~]# mount /dev/sdb1 /myapp-1
[root@centos7 ~]# cp -r /etc/ /myapp-1/
# 创建一个大文件
[root@centos7 ~]# dd if=/dev/zero of=/myapp-1/etc/bigfile bs=1M 
count=2000

原因:大文件占用大量空间。

解决方法:找到文件后删除.

[root@centos7 ~]# df -h /myapp-1/
文件系统       容量 已用 可用 已用% 挂载点
/dev/sdb1       2.0G  2.0G 436K  100% /myapp-1
# 方法1:find 查找
[root@centos7 ~]# find /myapp-1/ -size +100M
/myapp-1/etc/bigfile
# 方法2:du 查找
[root@centos7 ~]# du -s /myapp-1/* |sort -n |tail -2
2051628 /myapp-1/etc
[root@centos7 ~]# du -s /myapp-1/etc/* |sort -n |tail -2
23220 /myapp-1/etc/selinux
2008512 /myapp-1/etc/bigfile
[root@centos7 ~]# du -s /myapp-1/etc/bigfile/* |sort -n |tail -2
du: 无法访问"/myapp-1/etc/bigfile/*": 不是目录
# 删除大文件
[root@centos7 ~]# rm -f /myapp-1/etc/bigfile
[root@centos7 ~ ]# df -h /myapp-1/
文件系统       容量 已用 可用 已用% 挂载点
/dev/sdb1       2.0G   77M  2.0G    4% /myapp-1

找到文件后,删除即可

情况2:删除文件后,空间没有释放

准备环境

[root@centos7 ~]# dd if=/dev/zero of=/myapp-1/etc/bigfile bs=1M 
count=2000
[root@centos7 ~]# tail -f /myapp-1/etc/bigfile &
# 删除文件后,空间没有释放
[root@centos7 ~]# rm -f /myapp-1/etc/bigfile
[root@centos7 ~]# df -h /myapp-1/
文件系统       容量 已用 可用 已用% 挂载点
/dev/sdb1       2.0G  2.0G 772K  100% /myapp-1

原因:被删除的文件,仍然有程序在使用。

解决方法:找到像一个的程序并,终止程序.

[root@centos7 ~]# lsof |grep delete |grep /myapp-1
tail      1654                   root   3r     REG               8,17 
2061565952        444 /myapp-1/etc/bigfile (deleted)
[root@centos7 ~]# kill 1654
[root@centos7 ~]# df -h /myapp-1/
文件系统       容量 已用 可用 已用% 挂载点
/dev/sdb1       2.0G   72M  2.0G    4% /myapp-1

建议:清理大文件,先使用重定向清空文件内容,再删除文件。

情况3:大量的小文件占用空间

准备环境

[root@centos7 ~]# parted /dev/sdb unit MiB mkpart data02 ext4 2049 3073
[root@centos7 ~]# mkfs.ext4 /dev/sdb2
[root@centos7 ~]# mkdir /myapp-2
[root@centos7 ~]# mount /dev/sdb2 /myapp-2
[root@server ~ 15:01:00]# df -i /myapp-2
文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb2      65536      11   65525       1% /myapp-2
[root@centos7 ~]# touch /myapp-2/file-{00001..65530}
touch: 无法创建"/myapp-2/file-65526": 设备上没有空间
touch: 无法创建"/myapp-2/file-65527": 设备上没有空间
touch: 无法创建"/myapp-2/file-65528": 设备上没有空间
touch: 无法创建"/myapp-2/file-65529": 设备上没有空间
touch: 无法创建"/myapp-2/file-65530": 设备上没有空间
[root@centos7 ~] df -h /myapp-2/
Filesystem     Size Used Avail Use% Mounted on
/dev/sdb2       974M  1.8M 905M   1% /myapp-2

原因:文件系统中inode使用完了。

解决方法:删除大量的小文件或者将这些小文件备份到其他地方。

[root@centos7 ~] df -hi /myapp-2
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sdb2         64K   64K     0  100% /myapp-2
# 思路1:直接将这些小文件移走或删除
[root@centos7 ~]# rm -f /myapp-2/file-0*
# 思路2:合并大量小文件为单个文件
[root@centos7 ~]# cat /myapp-2/file-{00001..10000} > file-00001

Linux RAID 存储技术

环境准备

虚拟机添加6块20G 硬盘,sdb sdc sdd sde sdf sdg

RAID 实现方式

从实现角度看, RAID 主要分为:

  • RAID:所有功能均有操作系统和 CPU 来完成,没有独立的 RAID 控制 / 处理芯片和 I/O 处理芯片,效率最低。

  • RAID :配备了专门的 RAID 控制 / 处理芯片和 I/O 处理芯片以及阵列缓冲,不占用 CPU 资源,成本很高。

  • 软硬混合 RAID:具备 RAID 控制 / 处理芯片,但缺乏 I/O 处理芯片,需要 CPU 和驱动程序来完成,性能和成本在软 RAID 和硬 RAID 之间。

RAID 级别

RAID 0

适用场景

RAID 0适用于需要高性能而不关心数据冗余的场景。以下是几种适合使用RAID 0的场景:

  1. 视频编辑和处理:在视频编辑中,需要快速读取和写入大量数据。RAID 0可以通过并行读写操作提高数据传输速度,加快视频编辑和处理的速度。

  2. 大型数据库应用:对于需要频繁访问和查询数据库的应用程序,RAID 0可以提供更快的数据访问速度,加快数据库操作的响应时间。

  3. 实时流媒体:对于需要实时传输和处理大量数据的流媒体应用,RAID 0可以提供足够的带宽和吞吐量,确保流媒体内容的平滑播放。

优点

RAID 0具有以下优点:

  1. 高性能:通过数据条带化和并行读写操作,RAID 0可以提供更快的数据传输速度和更高的系统性能。

  2. 成本效益:相对于其他RAID级别(如RAID 1或RAID 5),RAID 0不需要额外的磁盘用于冗余备份,因此在成本上更具竞争力。

缺点

RAID 0也存在一些缺点:

  1. 缺乏冗余:由于RAID 0不提供数据冗余,如果任何一个驱动器发生故障,所有数据都可能丢失。因此,RAID 0不适合存储关键数据。

  2. 可靠性降低:由于没有冗余备份,RAID 0的可靠性相对较低。如果任何一个驱动器发生故障,整个阵列的可用性将受到影响。

RAID 1

适用场景

RAID 1适用于对数据冗余和高可用性要求较高的场景。以下是几种适合使用RAID 1的场景:

  1. 关键数据存储:对于关键数据的存储,如企业的财务数据、客户信息等,RAID 1可以提供数据冗余备份,以防止数据丢失。

  2. 数据库服务器:对于需要高可用性和容错性的数据库服务器,RAID 1可以确保数据的持久性和可用性,即使一个驱动器发生故障,也可以从其他驱动器中读取数据。

  3. 文件服务器:对于共享文件的服务器,RAID 1可以提供冗余备份,确保文件的可靠性和高可用性。

优点

RAID 1具有以下优点:

  1. 数据冗余备份:RAID 1通过数据镜像将数据完全复制到多个驱动器上,提供冗余备份,保护数据免受驱动器故障的影响。

  2. 高可用性:由于数据的冗余备份,即使一个驱动器发生故障,系统仍然可以从其他驱动器中读取数据,保证数据的可用性和连续性。

  3. 读取性能提升:RAID 1可以通过并行读取数据的方式提升读取性能,从而加快数据访问速度。

缺点

RAID 1也存在一些缺点:

  1. 成本增加:由于需要额外的磁盘用于数据冗余备份,RAID 1的成本相对较高。需要考虑额外的硬件成本。

  2. 写入性能略低:由于数据需要同时写入多个驱动器,相对于单个驱动器的写入性能,RAID 1的写入性能可能略低。

RAID 5

适用场景

RAID 5适用于需要性能增强和数据冗余的场景。以下是几种适合使用RAID 5的场景:

  1. 文件服务器:对于文件服务器,RAID 5可以提供高性能的数据访问和数据冗余备份,确保文件的安全性和可用性。

  2. 数据库服务器:对于需要高性能和数据冗余的数据库服务器,RAID 5可以提供快速的数据读取和写入,同时保护数据免受驱动器故障的影响。

  3. 小型企业环境:对于小型企业,RAID 5提供了经济实惠的解决方案,同时提供了性能和数据冗余的好处。

优点

RAID 5具有以下优点:

  1. 性能增强:通过数据条带化和并行读写操作,RAID 5可以提供较高的数据传输速度和系统性能。

  2. 数据冗余备份:通过分布式奇偶校验,RAID 5可以提供数据的冗余备份,保护数据免受驱动器故障的影响。

  3. 成本效益:相对于其他RAID级别(如RAID 1),RAID 5只需要额外一个驱动器用于奇偶校验信息,从而在成本上更具竞争力。

缺点

RAID 5也存在一些缺点:

  1. 写入性能受限:由于写入数据时需要重新计算奇偶校验信息,相对于读取操作,RAID 5的写入性能较低。

  2. 驱动器故障期间的数据完整性:如果一个驱动器发生故障,系统在恢复数据时需要进行计算,这可能导致数据访问速度较慢,并且在此期间可能会有数据完整性的风险。

RAID 6

适用场景

RAID 6适用于需要更高级别的数据冗余和性能增强的场景。以下是几种适合使用RAID 6的场景:

  1. 大容量存储系统:对于需要大容量存储和数据冗余备份的系统,如大型文件服务器或存档系统,RAID 6可以提供更高级别的数据冗余性。

  2. 长时间运行的应用程序:对于需要长时间运行的关键应用程序,如数据库服务器,RAID 6可以提供更高级别的数据冗余和故障容忍性。

  3. 虚拟化环境:在虚拟化环境中,需要高性能和更高级别的数据冗余来支持多个虚拟机的运行。RAID 6可以满足这些要求。

优点

RAID 6具有以下优点:

  1. 更高级别的数据冗余:通过分布式奇偶校验和双重奇偶校验,RAID 6可以提供更高级别的数据冗余性,即使同时发生两个驱动器故障,仍能恢复丢失的数据。

  2. 性能增强:通过数据条带化和并行读写操作,RAID 6可以提供较高的数据传输速度和系统性能。

缺点

RAID 6也存在一些缺点:

  1. 写入性能略低:由于数据需要同时写入多个驱动器,并进行双重奇偶校验计算,相对于读取操作,RAID 6的写入性能较低。

  2. 较高的成本:由于需要额外的磁盘用于奇偶校验信息和更复杂的计算,RAID 6的成本相对较高。需要考虑额外的硬件成本。

RAID 10

适用场景

RAID 10适用于需要高性能和数据冗余的场景。以下是几种适合使用RAID 10的场景:

  1. 数据库服务器:对于需要高可用性和性能的数据库服务器,RAID 10可以提供快速的数据读取和写入,同时保护数据免受驱动器故障的影响。

  2. 虚拟化环境:在虚拟化环境中,需要高性能和数据冗余来支持多个虚拟机的运行。RAID 10可以满足这些要求,提供性能增强和数据保护。

  3. 关键业务应用:对于关键业务应用,如金融交易系统或在线电子商务平台,RAID 10可以提供高可用性和快速的数据访问,确保业务的连续性和稳定性。

优点

RAID 10具有以下优点:

  1. 高性能:通过数据条带化和并行读写操作,RAID 10可以提供较高的数据传输速度和系统性能。

  2. 数据冗余备份:通过数据镜像将数据完全复制到另一个驱动器上,RAID 10提供了数据的冗余备份,保护数据免受驱动器故障的影响。

  3. 较高的可靠性:由于RAID 10采用镜像的方式进行数据冗余备份,即使一个驱动器发生故障,仍然可以从其他驱动器中读取数据,确保数据的可用性和连续性。

  4. 快速的故障恢复:在RAID 10中,如果一个驱动器发生故障,系统可以直接从镜像驱动器中恢复数据,而无需进行复杂的计算,从而加快故障恢复的速度。

缺点

RAID 10也存在一些缺点:

  1. 较高的成本:相对于其他RAID级别,RAID 10需要更多的驱动器用于数据镜像,从而增加了硬件成本。

  2. 低效的空间利用:由于RAID 10的数据镜像特性,有效的存储容量只等于所有驱动器中一半的容量,因此空间利用率较低。

RAID 50

适用场景

RAID 50适用于需要高性能和更高级别的数据冗余的场景。以下是几种适合使用RAID 50的场景:

  1. 大规模数据存储:对于需要大规模数据存储和数据冗余备份的系统,如视频编辑、数据分析或大型数据库,RAID 50可以提供高性能和较高级别的数据冗余性。

  2. 图形渲染和动画制作:在图形渲染和动画制作领域,需要高性能的存储系统来处理大型文件和复杂的渲染任务。RAID 50可以满足这些要求,提供快速的数据读取和写入速度。

  3. 虚拟化环境:在虚拟化环境中,需要高性能和更高级别的数据冗余来支持多个虚拟机的运行。RAID 50可以满足这些要求,提供性能增强和数据保护。

优点

RAID 50具有以下优点:

  1. 高性能:通过数据条带化和并行读写操作,RAID 50可以提供较高的数据传输速度和系统性能。

  2. 更高级别的数据冗余:由于采用了多个RAID 5组的方式,RAID 50提供了更高级别的数据冗余备份,即使同时发生多个驱动器故障,仍能恢复丢失的数据。

缺点

RAID 50也存在一些缺点:

  1. 较高的成本:由于需要更多的驱动器用于数据条带化和数据冗余备份,RAID 50的硬件成本相对较高。

  2. 配置和管理复杂性:由于涉及多个RAID 5组和驱动器,RAID 50的配置和管理相对复杂,需要更多的注意和维护。

RAID 60

适用场景

RAID 60适用于需要更高级别的数据冗余和更高性能的场景。以下是几种适合使用RAID 60的场景:

  1. 大型数据库系统:对于大型数据库系统,需要高可用性、高性能和更高级别的数据冗余来确保数据的完整性和可靠性。RAID 60可以提供这些要求。

  2. 大规模数据分析:在大规模数据分析领域,需要高性能的存储系统来处理大量数据的读取和写入。RAID 60可以满足这些要求,提供较高的数据传输速度和系统性能。

  3. 视频流****媒体处理:对于视频流媒体处理应用,需要快速的数据读取和写入,以确保流畅的视频播放和高质量的媒体处理。RAID 60可以满足这些要求。

优点

RAID 60具有以下优点:

  1. 更高级别的数据冗余:由于采用了多个RAID 6组的方式,RAID 60提供了更高级别的数据冗余备份,即使同时发生多个驱动器故障,仍能恢复丢失的数据。

  2. 高性能:通过数据条带化和并行读写操作,RAID 60可以提供较高的数据传输速度和系统性能。

缺点

RAID 60也存在一些缺点:

  1. 较高的成本:由于需要更多的驱动器用于数据条带化和数据冗余备份,RAID 60的硬件成本相对较高。

  2. 配置和管理复杂性:由于涉及多个RAID 6组和驱动器,RAID 60的配置和管理相对复杂,需要更多的注意和维护。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐