linux存储相关命令
- 磁盘操作
- fdisk-查看及管理分区
- 分区操作
- df-分区情况统计
- mount/umount-挂载/取消挂载
- tune2fs-调整和查看ext2/ext3文件系统参数
- blkid-查看文件系统基本信息
- e2label-设定分区的label
- blockdev-获取/设置块设备的属性值
- dumpe2fs-查看分区详细信息
- 格式化
- mkfs-格式化分区
- mke2fs-格式化ext系统分区
- 文件操作
- du-查看占用空间大小
- ls-列出文件
- stat-显示文件详细信息
- fuser-查找使用文件的进程
- 检查/修复分区
- fsck-检查并修复linux文件系统
- badblocks-检查硬盘坏道
- filefrag-查看文件碎片报告
e2label
作用
e2label命令,用于获取或设置ext2、ext3文件系统对应的分区的卷标。
卷标:简单来说就是对分区的一个标示。在格式化的时候生成或通过e2label命令来设置
使用
e2label 分区 [新label]
操作
e2label /dev/sdb1 test
fdisk
作用
用于创建和维护分区表
参数
- -l: 列出素所有分区表
- 菜单参数
- m :显示菜单和帮助信息
- a :活动分区标记/引导分区
- d :删除分区
- l :显示分区类型
- n :新建分区
- p :显示分区信息
- q :退出不保存
- t :设置分区号
- v :进行分区检查
- w :保存修改
- x :扩展应用,高级功能
操作
- 查看分区列表
fdisk -l
- 管理分区
fdisk /dev/sdb1
df
作用
用于显示目前在 Linux 系统上挂载着的文件系统磁盘/分区使用情况统计
参数
- -a, --all: 包含所有的具有 0 Blocks 的文件系统
- --block-size={SIZE}: 使用 {SIZE} 大小的 Blocks
文件 - -h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...)
- -H, --si: 很像 -h, 但是用 1000 为单位而不是用 1024
- -i, --inodes: 列出 inode 资讯,不列出已使用 block
- -k, --kilobytes: 就像是 --block-size=1024
- -l, --local: 限制列出的文件结构
- -m, --megabytes: --block-size=1048576
- --no-sync: 取得资讯前不 sync (预设值)
- -P, --portability: 使用 POSIX 输出格式
- --sync: 在取得资讯前 sync
- -t, --type=TYPE: 限制列出文件系统的 TYPE
- -T, --print-type: 显示文件系统的形式
- -x, --exclude-type=TYPE: 限制列出文件系统不要显示 TYPE
操作
[root@k8s-master /]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
······
/dev/sdb1 12544 15 12529 1% /data1
[root@k8s-master /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
······
/dev/sdb1 44M 1.1M 39M 3% /data1
mkfs
作用
用于格式化磁盘或分区,即创建指定格式的文件系统
使用
- mkfs [tab] [tab]:按下两下tab键查看系统支持哪些文件系统的格式化功能
- mkfs -t xfs 与 mkfs.xfs相同
参数说明
- -t: 指定文件系统格式名,等同于mkfs.文件系统格式名
- xfs
- ext4
- 等等
- -b: 块容量,范围是512B-64K。不过Linux最大为4K
操作
mkfs.ext4 /dev/sda2
mke2fs
作用
mke2fs命令是专门用于管理ext系列文件系统的一个专门的工具。其还有像mkfs.ext2,mkfs.ext3,mkfs.ext4等衍生的命令,它们的用法mke2fs类似
配置文件
mke2fs的配置内容位于配置文件/etc/mke2fs.conf:mke2fs
- 文件详细内容见附2
- blocksize:每个分块的大小。
- inode_size:每个inode占用256b磁盘空间。
- inode_ratio:每个16kb字节的磁盘空间会分配一个inode。一个分区inode数量=分区容量/inode_ratio
- inode_ratio值越小,硬盘可用的inode就越多,适合存储海量小文件的情景。
- inode_ratio值越大,硬盘可用的inode就越少,inode占用硬盘空间就会越少,适合存储大文件的情景。
- inode数量*inode_size/1024/1024=inode占用空间(mb)
mke2fs.ext4参数
- -b: block-size 指定block size大小,默认配置文件在/etc/mke2fs.conf
- -i: 定义inode_ratio的大小
- -I: 指定inode size大小,默认配置文件在/etc/mke2fs.conf,inode_size = 256
- -N: 指定inode个数,最大创建文件个数
- -m: 指定预留block总个数的百分比,默认是5%
- -g: 指定每个块组含有多少block
- -M: 指定最后挂载的目录路径
- -t: 指定文件系统类型
- -J: 指定日志文件大小,默认单位MB,范围4MB-40MB
- -r: 指定要建立的ext4文件系统版本
操作
mke2fs.ext4 /dev/sda2 -b 1024 -N 1 -I 128
说明
- If
-b
option is is not specified, mke2fs will pick a single default usage type based on the size of the filesystem to be created.- If the filesystem size is less than or equal to 3 megabytes, mke2fs will use the filesystem type floppy.
- If the filesystem size is greater than 3 but less than or equal to 512 megabytes, mke2fs(8) will use the filesystem type small.
- If the filesystem size is greater than or equal to 4 terabytes but less than 16 terabytes, mke2fs(8) will use the filesystem type big.
- If the filesystem size is greater than or equal to 16 terabytes, mke2fs(8) will use the filesystem type huge.
- Otherwise, mke2fs(8) will use the default filesystem type default.
mount/umount
作用
用于挂载某个格式化后的磁盘或分区文件
挂载分区
mount /dev/sdb1 /data1
umount /dev/sdb1
挂载目录
mount --bind d1 data1
stat
作用
用来显示文件的详细信息,包括inode, atime, mtime, ctime;查看文件或目录的诸如atime,mtime,ctime等信息即可使用stat命令,也可使用ls命令,但相比而言,stat还可以看到设备号,环境等信息。
参数
- -f: 不显示文件本身的信息,显示文件所在文件系统的信息
- -L: 显示符号链接
- -C: 文件权限
- -t: 简洁模式,只显示摘要信息
输出
- File:显示文件名
- Size:显示文件大小
- Blocks:文件使用的数据扇区总数
- IO Block:IO块大小
- regular file:文件类型(常规文件)
- Device:设备编号
- Inode:Inode号
- Links:链接数
- Access:文件的权限
- Gid、Uid:文件所有权的Gid和Uid。
操作
- 查看某文件的inode信息
[root@k8s-master data1]# stat a.txt
文件:"a.txt"
大小:2 块:2 IO 块:1024 普通文件
设备:811h/2065d Inode:14 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2020-10-31 16:54:08.000000000 +0800
最近更改:2020-10-31 16:54:08.000000000 +0800
最近改动:2020-10-31 16:54:08.000000000 +0800
创建时间:-
- 显示文件所在文件系统的信息
[root@k8s-master data1]# stat -f a.txt
文件:"a.txt"
ID:618e4c628b2420d7 文件名长度:255 类型:ext2/ext3
块大小:1024 基本块大小:1024
块:总计:44489 空闲:43449 可用:39938
Inodes: 总计:12544 空闲:12531
说明
- Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
- Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
- Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
值得注意的是stat的blocks表示的不是该inode占用了多少块,而是表示占用了多少磁盘物理块,即扇区
tune2fs
作用
tune2fs是调整和查看ext2/ext3文件系统的文件系统参数,包括inode及block大小等信息
参数
- -l: 查看文件系统信息
- -c: max-mount-counts 设置强制自检的挂载次数,如果开启,每挂载一次mount conut就会加1,超过次数就会强制自检
- -i: interval-between-checks[d|m|w] 设置强制自检的时间间隔[d天m月w周]
- -m: reserved-blocks-percentage 保留块的百分比
- -j: 将ext2文件系统转换为ext3类型的文件系统
- -L: volume-label 类似e2label的功能,可以修改文件系统的标签
- -r: reserved-blocks-count 调整系统保留空间
- -o: 设置或清除默认挂载的文件系统选项
操作
- 查看文件系统信息
tune2fs -l /dev/sdb1 | grep "Block size"
- 设置强制检查前文件系统可以挂载的次数
tune2fs -c 30 /dev/hda1
- 关闭强制检查挂载次数限制。
tune2fs -c -l /dev/hda1
- 设置某时间后检查
tune2fs -i 10 /dev/hda1 10天后检查
tune2fs -i 1d /dev/hda1 1天后检查
tune2fs -i 3w /dev/hda1 3周后检查
tune2fs -i 6m /dev/hda1 半年后检查
tune2fs -i 0 /dev/hda1 禁用时间检查
- 添加日志功能,将ext2转换成ext3文件系统
tune2fs -j /dev/hda1
- 调整/dev/hda1分区的保留空间为40000个磁盘块
tune2fs -r 40000 /dev/hda1
- 设置/dev/hda1挂载选项,启用Posix Access Control Lists和用户指定的扩展属性
tune2fs -o acl,user_xattr /dev/hda1
- 开机取消自检
tune2fs -l /dev/sdb1 | grep -E ‘Maximum mount count:|Check interval’
tune2fs -i 0 -c 0 /dev/sdb1
blockdev
作用
blockdev命令可以获取linux下块设备的属性值,以及设置一些块设备的属性值
参数
* block -V: 输出程序的版本号
* blockdev --report [devices]: 列举出devices设备信息。如果没有devices,则输出所有操作系统发现的块设备。
* blockdev [-v|-q]: commands devices
* -v 命令设置后,后面的命令行参数执行,会输出相应的提示信息。
* -q 命令设置后,后面的命令行参数执行,不会输出相应的提示信息。默认也是不会输出。
* --getsz: 获取512字节的扇区的个数
* --setro: 设置只读
* --setrw: 设置读写
* --getro: 获得只读
* --getdiscardzeroes: get discard zeroes support status
* --getss: 获得逻辑块(扇区)大小
* --getpbsz: 获得物理块(扇区)大小
* --getiomin: 获得最小 I/O 大小
* --getioopt: 获得最优 I/O 大小
* --getalignoff: 获得字节中的对齐偏移量
* --getmaxsect: 获得每次请求的最大扇区数
* --getbsz: 获得块大小
* --setbsz <bytes>: 设置块大小
* --getsize: 获得32位扇区个数(废弃, 使用 * --getsz)
* --getsize64: 获得字节大小
* --setra <sectors>: 设置 readahead
* --getra: 获取 readahead
* --setfra <sectors>: 设置 文件系统 readahead
* --getfra: 获取 文件系统 readahead
* --flushbufs: 刷新缓存
* --rereadpt: 重新读取分区表
操作
- 设置设备为只读
blockdev --setro /dev/hda4
- 读取设备是否为只读
blockdev --getro /dev/hda4
- 设置设别为可读写:
blockdev --setrw /dev/hda4
- 获取块大小
[root@CentOS-7-2 ~]# blockdev --getbsz /dev/sda1
4096
filefrag
作用
查看文件碎片报告
操作
[root@VM-3-11-centos]# filefrag -v application.log
Filesystem type is: ef53
File size of application.log is 133065846 (32487 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 13182676.. 13182676: 1:
1: 1.. 63: 10863802.. 10863864: 63: 13182677:
- 每个ext为一个连续的block
- 测试发现小文件扩展时,会直接将小文件内容复制到新的连接的blocks中
blkid
作用
blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。
参数
- -o: 以列表方式查看详细信息
- -s: 显示指定信息,默认显示所有信息
操作
- 列出当前系统中所有已挂载文件系统的类型
[root@k8s-master ~]# blkid
/dev/sdb1: UUID="c1a15f41-24f6-49ac-a3ed-d120f3d66d27" TYPE="ext4"
······
- 显示某设备文件系统
[root@k8s-master ~]# blkid -s TYPE /dev/sdb1
/dev/sdb1: TYPE="ext4"
- 以列表方式查看详细信息
[root@k8s-master ~]# blkid -o list
device fs_type label mount point UUID
---------------------------------------------------------------------------------
/dev/sdb1 ext4 /data1 c1a15f41-24f6-49ac-a3ed-d120f3d66d27
dumpe2fs
作用
查看分区superblock 和blockgroup等详细信息
参数
- -b: 显示文件系统中保留的损坏块
- -o superblock=superblock: 检查文件系统时,使用指定大小的超级块。此选项通常不需要,除非文件系统向导正在检查严重损坏的文件系统的剩余部分。
- -o blocksize=blocksize: 检查文件系统时,指定块大小。此选项通常不需要,除非文件系统向导正在检查严重损坏的文件系统的剩余部分。
- -f: 强制执行
- -h: 只显示超级块信息,而不显示任何块组描述符详细信息
- -i: 显示从e2image获得的文件系统信息,使用设备作为image文件的路径名。
- -x: 以十六进制显示文件系统信息
操作
[root@k8s-master data1]# dumpe2fs /dev/sdb1
······
Inode count: 12544
Block count: 50176
Block size: 1024
Inode size: 128
······
Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
Checksum 0xe02e, unused inodes 1775
主 superblock at 1, Group descriptors at 2-2
保留的GDT块位于 3-258
Block bitmap at 259 (+258), Inode bitmap at 275 (+274)
Inode表位于 291-514 (+290)
6337 free blocks, 1777 free inodes, 3 directories, 1775个未使用的inodes
可用块数: 287-290, 1860-8192
可用inode数: 13, 16, 18-1792
······
fsck
作用
检查并修复linux文件系统
操作
[root@k8s-master /]# fsck /dev/sdb1
fsck,来自 util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdb1: clean, 15/12544 files, 6776/50176 blocks
badblocks
作用
检查硬盘坏道
操作
badblocks /dev/sdb1
fuser
作用
当显示 设备正在忙的时候,可以使用这个命令查看使用进程
ls
作用
列出某目录下的文件,当展示详细信息,如 文件的大小,权限,所属等信息时,这些信息均取自inode
参数
- ls -a: 列出文件下所有的文件,包括以“.“开头的隐藏文件(Linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录)。
- ls -l: 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。
- ls -F: 在每一个文件的末尾加上一个字符说明该文件的类型。"@"表示符号链接、"|"表示FIFOS、"/"表示目录、"="表示套接字。
- ls -s: 在每个文件的后面打印出文件的大小。size(大小)。
- ls -t: 按时间进行文件的排序 Time(时间)
- ls -A: 列出除了"."和".."以外的文件。
- ls -R: 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现
- ls -r: 倒着排序 reverse
- ls -L: 列出文件的链接名。Link(链接)
- ls -S: 以文件的大小进行排序
- ls -i: 显示该文件对应的inode id
- ls -p: 只给目录添加/
操作
[root@k8s-master data1]# ls -i
14 a.txt 12 d1 11 lost+found
说明
通常情况下,ls显示的文件大小比du显示的磁盘占用空间小,比如文件系统的block是4K,一个13K的文件占用的空间是 13k/4k = 3.25 个block,一个block只能被一个文件占用,因此实际占用空间就是4个block,就是16K。
du
作用
du命令用来查看目录或文件所占用磁盘空间的大小。常用选项组合为:du -sh
参数
-h:以人类可读的方式显示
-a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
-s:显示文件或整个目录的总大小,默认单位是KB
-c:显示当前目录下目录或文件占用的磁盘空间大小,还要统计它们的总和
--apparent-size:显示目录或文件自身的大小,而不是占用磁盘的大小,即为inode信息中的大小
-l:统计硬链接占用磁盘空间的大小
-L:统计符号链接所指向的文件占用的磁盘空间大小
-d: max-depth=N
操作
du -sh: 查看当前目录总共占的容量。而不单独列出各子项占用的容量
du -lh --max-depth=1: 查看当前目录下一级子文件和子目录占用的磁盘容量。
du -sh * | sort -n: 统计当前文件夹(目录)大小,并按文件大小排序
du -sk filename: 以单位kb查看指定文件大小
du -hd1: 查看当前目录
附2-/etc/mke2fs.conf
内容
[root@k8s-master boot]# cat /etc/mke2fs.conf
[defaults]
base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
default_mntopts = acl,user_xattr
enable_periodic_fsck = 0
blocksize = 4096
inode_size = 256
inode_ratio = 16384
[fs_types]
ext3 = {
features = has_journal
}
ext4 = {
features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize,64bit
inode_size = 256
}
ext4dev = {
features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
inode_size = 256
options = test_fs=1
}
small = {
blocksize = 1024
inode_size = 128
inode_ratio = 4096
}
floppy = {
blocksize = 1024
inode_size = 128
inode_ratio = 8192
}
big = {
inode_ratio = 32768
}
huge = {
inode_ratio = 65536
}
news = {
inode_ratio = 4096
}
largefile = {
inode_ratio = 1048576
blocksize = -1
}
largefile4 = {
inode_ratio = 4194304
blocksize = -1
}
hurd = {
blocksize = 4096
inode_size = 128
}