写在前面: 博客书写牢记5W1H法则:What,Why,When,Where,Who,How。 本篇主要内容:
● 磁盘相关概念罗列
磁盘接口类型
机械式硬盘相关概念
设备文件命名与接口类型识别
磁盘分区格式:MBR与GTP
文件系统相关概念及VFS
● 磁盘相关命令详解
fdisk
ln
mkfs/mke2fs
e2label
tune2fs
dumpe2fs
fsck/e2fsck
blkid
● swap分区
mkswap
swapon
swapoff
● 文件系统挂载
mount
umount
开机挂载
/etc/fstab配置
● 文件系统、目录容量统计
df
du
(一)磁盘相关概念罗列:
硬盘速率单位:
bps:bits per second
Bps:Bytes per second
磁盘接口类型:
并口:同一线缆可以接多块设备:
IDE:两个,主(master)/从(slave),133MB/s
SCSI:宽带16-1个;窄带:8-1个。Ultrascsi320, 320MB/S, UltraSCSI640, 640MB/S
串口:同一线缆只可以接一个设备;
SATA:串口,6gbps
SAS:串口,6gbps
USB:串口,480MB/s
机械式硬盘相关概念:
机械硬盘里面有一或多个盘片,每个盘片两面都有磁头,2磁头同一个机械臂,同步运动
track:磁道。硬盘磁片上同一个同心圆扇区组成的圆
如:windows的C盘其实是最外围的磁道
sector:扇区。磁盘的最小物理存储单位。
扇区大小有两种:512bytes和4Kbytes,一般也都为512bytes
cylinder:柱面。由于磁盘里面可能有多个磁盘,多个同心圆扇区组合成的圆。
分区划分基于柱面
设备类型回顾:
块(block):随机访问,数据交换单位为“块”。
字符(character):线性访问,数据交换单位为“字符”。
设备文件命名:
linux设备文件在/dev/目录下,起到关联设备驱动程序,提供设备访问入口的功能。
设备号:
major:主设备号。区分设备类型,用于标明设备所需的驱动程序;
minor:次设备号。区分同种类型下的不同设备;是特定设备访问入;
如:/dev/sda,其中sd就是主设备号,a就是次设备号
磁盘接口类型的识别:
IDE: /dev/hd[a-z]
例如:/dev/hda, /dev/hdb
SCSI, SATA, USB, SAS: /dev/sd[a-z]
分区:
/dev/sda#:/dev/sda1, ...
注意:CentOS 6、7统统将硬盘设备文件标识为/dev/sd[a-z]#
引用设备分区方式:
设备文件名(即设备路径)。如/dev/sda1
卷标(LABEL)。如MYDATA
UUID。唯一标示,随机生成的一长串字符。如“6a3c5155-7e5f-42c6-8479-da6afcbfb442”
磁盘分区格式:
第一扇区记录了分区格式信息
MBR:(Master Boot Record)
记录于第一扇区,由于老的硬盘扇区大小都是512bytes,所以MBR占用512bytes空间:按照每个扇区512bytes计算,MBR只能支持到大概2.2TB的空间,再大则无法识别其余部分。也可以增加扇区大小来缓解MBR这方面的不足,使其支持更大的空间。
446bytes:bootloader, 程序,引导启动操作系统的程序;
64bytes:分区表,每16bytes标识一个分区,一共只能有4个分区;
4主分区
3主1扩展:n逻辑分区
2bytes:MBR区域的有效性标识;55AA为有效;
GPT:(GUID Partition Table)
GPT将磁盘所有区块以LBA(由于新硬盘有些以4Kbytes为一个扇区,所以统一将512bytes叫做一个LBA)来规划,GTP使用34个LBA区块来记录分区信息。另外,整个磁盘的最后33个LBA也拿来作为另一个备份。
LBA0;记录了整个磁盘采用GPT格式
LBA1:记录了整个分区表的位置和大小,以及备份用的GPT分区的位置
LBA2-33:记录每条分区的相关信息
每个LBA有512bytes,用来记录4个分区信息,所以每个分区占用128bytes。除了记录标示符和相关信息外,每条记录分别提供64bites来记录开始/结束的扇区号码。因此其最大容量限制为:2^64*512bytes=2^63*1Kbytes=2^33TB=8ZB,其中1ZB=1^30TB。另外,由于有32个LBA存储分区记录,所以最多可以有32*4=128个分区!
文件系统相关概念: 格式化:低级格式化(分区之前进行,划分磁道)、高级格式化(分区之后对分区进行,创建文件系统) 元数据区,数据区 元数据区: 文件元数据:inode (index node) 大小、权限、属主属组、时间戳、数据块指针 目录元数据: 与文件元数据类似 目录数据区: 存储了本目录下所有文件名和对应inode号码 注意:元数据区并没有存储文件名,文件名是存储在目录所在的数据区的。
符号链接文件:存储数据指针的空间当中存储的是真实文件的访问路径; 设备文件:存储数据指针的空间当中存储的是设备号(major, minor);
bitmap index:位图索引
VFS: Virtual File System Linux的文件系统: ext2(无journal功能,即无日志), ext3, ext4, xfs, reiserfs, btrfs 光盘:iso9660 网络文件系统:nfs, cifs 集群文件系统:gfs2, ocfs2 内核级分布式文件系统:ceph windows的文件系统:vfat, ntfs 伪文件系统:proc, sysfs, tmpfs, hugepagefs Unix的文件系统:UFS, FFS, JFS 交换文件系统:swap 用户空间的分布式文件系统:mogilefs, moosefs, glusterfs
(二)硬盘相关命令详解
fdisk
Partition table manipulator for Linux
fdisk -l [-u] [device...]
fdisk device
fdisk提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;直到使用w命令保存至磁盘上;
常用命令:
n:创建新分区
d:删除已有分区
t:修改分区类型
l:查看所有已经ID
w:保存并退出
q:不保存并退出
m:查看帮助信息
p:显示现有分区信息
注意:在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别;
查看:cat /proc/partitions
通知内核强制重读磁盘分区表:
CentOS 5:partprobe [device]
CentOS 6,7:partx, kpartx
partx -a [device]
kpartx -af [device]
其他分区创建工具:parted、sfdisk、cfdisk、gdisk(专为GPT分区的工具)
链接文件:ln命令
访问同一个文件不同路径;
硬链接:指向同一个inode的多个文件路径;
特性:
(1) 目录不支持硬链接;
(2) 硬链接不能跨文件系统;
(3) 创建硬链接会增加inode引用计数;
创建:
ln src link_file
符号链接:指向一个文件路径的另一个文件路径;
特性:
(1) 符号链接与文件是两人个各自独立的文件,各有自己的inode;对原文件创建符号链接不会增加引用计数;
(2) 支持对目录创建符号链接,可以跨文件系统;
(3) 删除符号链接文件不影响原文件;但删除原文件,符号指定的路径即不存在,此时会变成无效链接;
注意:符号链接文件的大小是其指定的文件的路径字符串的字节数;
创建:
ln -s src link_file
-v:verbose
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| #在/tmp下新建/etc/fstab的硬链接文件并查看:
[iyunv@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 61M 0 rom
sda 8:0 0 120G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 60G 0 part
│ ├─vg0-root (dm-0) 253:0 0 20G 0 lvm /
│ ├─vg0-swap (dm-1) 253:1 0 2G 0 lvm [SWAP]
│ ├─vg0-usr (dm-2) 253:2 0 10G 0 lvm /usr
│ └─vg0-var (dm-3) 253:3 0 20G 0 lvm /var
├─sda3 8:3 0 5G 0 part
├─sda4 8:4 0 31.5K 0 part
└─sda5 8:5 0 10G 0 part /mnt/mydata
[iyunv@localhost ~]# ls -l /etc/fstab
-rw-r--r-- 1 root root 921 Mar 12 11:56 /etc/fstab
[iyunv@localhost ~]# ln /etc/fstab /tmp/new.fstab
[iyunv@localhost ~]# ls -l /etc/fstab /tmp/new.fstab
-rw-r--r-- 2 root root 921 Mar 12 11:56 /etc/fstab
-rw-r--r-- 2 root root 921 Mar 12 11:56 /tmp/new.fsta
[iyunv@localhost ~]# ln /etc/fstab /var/fstab.bak
ln: creating hard link `/var/fstab.bak' => `/etc/fstab': Invalid cross-device link
#通过lsblk可以看到/etc目录和/tmp目录都没有单独分区,也就是说这两个目录都是直接在/目录所在的分区的,即在同一个磁盘分区内,创建硬链接成功,两文件出文件名外都一样,inode引用计数由原来的1变为2。而在单独分区的/var目录则无法创建硬链接,不在同一分区。
#创建软链接(symbolic link)测试
[iyunv@localhost ~]# ln -s /etc/fstab /tmp/fstab.symbolic-link
[iyunv@localhost ~]# ln -s /etc/fstab /var/fstab.symbolic-link
[iyunv@localhost ~]# ls -l /tmp/fstab.symbolic-link /var/fstab.symbolic-link
lrwxrwxrwx 1 root root 10 Mar 12 20:25 /tmp/fstab.symbolic-link -> /etc/fstab
lrwxrwxrwx 1 root root 10 Mar 12 20:25 /var/fstab.symbolic-link -> /etc/fstab
#甚至在centOS7版本上根目录下的许多目录都是软链接而已
[iyunv@localhost ~]# ls -l /bin /lib /lib64 /sbin
lrwxrwxrwx. 1 root root 7 Mar 4 02:40 /bin -> usr/bin
lrwxrwxrwx. 1 root root 7 Mar 4 02:40 /lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Mar 4 02:40 /lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 Mar 4 02:40 /sbin -> usr/sbin
[iyunv@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
|
文件系统管理工具:
创建文件系统的工具
mkfs
mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...
检测及修复文件系统的工具
fsck
fsck.ext2, fsck.ext3, ...
查看其属性的工具
dumpe2fs, tune2fs
调整文件系统特性:
tune2fs
内核级文件系统的组成部分:
文件系统驱动:由内核提供
文件系统箮理工具:由用户空间的应用程序提供
ext系列文件系统的管理工具:
mkfs.ext2, mkfs.ext3, mkfs.ext4
mkfs -t ext2 = mkfs.ext2
mke2fs
ext系列文件系统专用管理工具
mke2fs [OPTIONS] device
-t fs-type:指明要创建的文件系统类型
mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4
-b block-size:指明文件系统的块大小,有效值为1024/2048/4096
-L new-volume-label:指明卷标;
-j:创建有日志功能的文件系统ext3;
mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3
-i bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode;
-N number-of-inodes:直接指明要给此文件系统创建的inode的数量;
-m reserved-blocks-percentage:指定预留的空间,百分比;默认5%
-O [^]FEATURE:以指定的特性创建目标文件系统;
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| #在/dev/sda磁盘中新建一个分区,并格式化为ext4类型,指明块大小为4K,卷标为MYDATA,预留空间为2%。
[iyunv@localhost ~]# fdisk /dev/sda
...分区过程省略...
[iyunv@localhost ~]# partx -a /dev/sda
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
BLKPG: Device or resource busy
error adding partition 4
BLKPG: Device or resource busy
error adding partition 5
[iyunv@localhost ~]# cat /proc/partitions
major minor #blocks name
8 0 125829120 sda
8 1 204800 sda1
8 2 62914560 sda2
8 3 5252256 sda3
8 4 31 sda4
8 5 10490413 sda5
253 0 20971520 dm-0
253 1 2097152 dm-1
253 2 10485760 dm-2
253 3 20971520 dm-3
[iyunv@localhost ~]# mke2fs -b 4096 -L MYDATA -m 2 -t ext4 /dev/sda5
mke2fs 1.41.12 (17-May-2010)
Filesystem label=MYDATA
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655776 inodes, 2622603 blocks
52452 blocks (2.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2688548864
81 block groups
32768 blocks per group, 32768 fragments per group
8096 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
|
e2label
Change the label on an ext2/ext3/ext4 filesystem
e2label device [ new-label ]
是设置或查看卷标的命令
实例:
1
2
3
4
5
| [iyunv@localhost ~]# e2label /dev/sda5
MTDATA
[iyunv@localhost ~]# e2label /dev/sda5 MYDATA
[iyunv@localhost ~]# e2label /dev/sda5
MYDATA
|
tune2fs
adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
注意:块大小创建后不可修改。
tune2fs [OPTIONS] device
-l:查看超级块的内容
-j:添加ext3的journal功能到文件系统,即改为ext3文件系统,但不会丢失数据
-L volume-label:修改卷标
-m reserved-blocks-percentage:调整预留空间
-O [^]feature[,...]:开启或关闭某中特性
-o [^]mount_options:开启或关闭某种默认挂载选项
acl:开启acl
^acl:关闭acl
dumpe2fs
dump ext2/ext3/ext4 filesystem information
显示ext系列文件系统属性信息
-h:不输出块组信息
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| #重新格式化刚才分区格式为ext2,并挂载到/mnt/mydata,然后使用tune2fs修改文件系统类型为ext3,修改卷标为MYDATA,修改预留空间为2%,并设置挂载时默认禁用acl。
[iyunv@localhost ~]# mkfs.ext2 /dev/sda5
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655776 inodes, 2622603 blocks
131130 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2688548864
81 block groups
32768 blocks per group, 32768 fragments per group
8096 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[iyunv@localhost ~]# blkid /dev/sda5
/dev/sda5: UUID="92a982f0-3cf6-4388-ad92-1a4d8836db01" TYPE="ext2"
[iyunv@localhost ~]# mount /dev/sda5 /mnt/mydata/
[iyunv@localhost ~]# cp /var/log/messages /mnt/mydata/
[iyunv@localhost ~]# ls /mnt/mydata/
lost+found messages
[iyunv@localhost ~]# tune2fs -j -L MYDATA -m 2 -o ^acl /dev/sda5
tune2fs 1.41.12 (17-May-2010)
Setting reserved blocks percentage to 2% (52452 blocks)
Creating journal inode: done
This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[iyunv@localhost ~]# mount -o remount /dev/sda5 /mnt/mydata
[iyunv@localhost ~]# blkid /dev/sda5
/dev/sda5: LABEL="MYDATA" UUID="92a982f0-3cf6-4388-ad92-1a4d8836db01" SEC_TYPE="ext2" TYPE="ext3"
[iyunv@localhost ~]# ls /mnt/mydata
lost+found messages
[iyunv@localhost ~]# cd /mnt/mydata/
[iyunv@localhost mydata]# useradd fred
[iyunv@localhost mydata]# getfacl messages
# file: messages
# owner: root
# group: root
user::rw-
group::---
other::---
[iyunv@localhost mydata]# setfacl -m u:fred:rwx messages
setfacl: messages: Operation not supported
|
文件系统检测的工具:
因进程意外中止或系统崩溃等 原因导致定稿操作非正常终止时,可能会造成文件损坏;此时,应该检测并修复文件系统; 建议,离线进行;
ext系列文件系统:
e2fsck
check a Linux ext2/ext3/ext4 file system
e2fsck [OPTIONS] device
-y:对所有问题自动回答为yes;
-f:即使文件系统处于clean状态,也要强制进行检测
fsck
check and repair a Linux file system
-t fstype:指明文件系统类型;
fsck -t ext4 = fsck.ext4
-a:无须交互而自动修复所有错误;
-r:交互式修复;
centOS6.x使用xfs文件系统:
使用yum或其他方式安装上xfs文件系统管理软件即可
yum -y install xfsprogs
blkid
command-line utility to locate/print block device attributes
blkid -L label | -U uuid:根据卷标或UID定位设备
(三)swap分区
Linux上的交换分区必须使用独立的文件系统,且文件系统的System ID必须为82
相关命令:
mkswap
创建swap分区
swapon
swapon [OPTION] [DEVICE]
-a:启用定义在/etc/fstab文件中的所有swap设备;
swapoff
swapoff [OPTION] [DEVICE]
-a:关闭定义在/etc/fstab文件中的所有swap设备;
创建swap分区:
分区并设置systemID为82 ---> mkswap格式化 ---> swapon [DEVICE]挂载并启用。
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| #新建一个4G分区,并挂载为swap,设置开机挂载
[iyunv@localhost ~]# fdisk /dev/sda
...步骤省略,记得调整分区类型为82...
[iyunv@localhost ~]# kpartx -af /dev/sda
device-mapper: reload ioctl on sda1 failed: Invalid argument
create/reload failed on sda1
device-mapper: reload ioctl on sda2 failed: Invalid argument
create/reload failed on sda2
device-mapper: reload ioctl on sda3 failed: Invalid argument
create/reload failed on sda3
device-mapper: reload ioctl on sda4 failed: Invalid argument
create/reload failed on sda4
device-mapper: reload ioctl on sda5 failed: Invalid argument
create/reload failed on sda5
device-mapper: reload ioctl on sda6 failed: Invalid argument
create/reload failed on sda6
device-mapper: reload ioctl on sda7 failed: Invalid argument
create/reload failed on sda7
device-mapper: reload ioctl on sda8 failed: Invalid argument
create/reload failed on sda8
[iyunv@localhost ~]# cat /proc/partitions
major minor #blocks name
2 0 4 fd0
8 0 125829120 sda
8 1 512000 sda1
8 2 41943040 sda2
8 3 20971520 sda3
8 4 1 sda4
8 5 2098176 sda5
8 6 1024 sda6
8 7 5242880 sda7
8 8 4194304 sda8
11 0 1048575 sr0
[iyunv@localhost ~]# mkswap /dev/sda8
mkswap: /dev/sda8: warning: wiping old swap signature.
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=c9b73cc8-7371-4730-a39d-3ee08eff2a50
[iyunv@localhost ~]# free -m
total used free shared buff/cache available
Mem: 977 148 623 6 205 647
Swap: 2048 0 2048
[iyunv@localhost ~]# swapon /dev/sda8
[iyunv@localhost ~]# free -m
total used free shared buff/cache available
Mem: 977 151 620 6 205 644
Swap: 6144 0 6144
#在/etc/fstab添加如下内容:
UUID=c9b73cc8-7371-4730-a39d-3ee08eff2a50 swap swap defaults 0 0
|
(四)文件系统挂载:
根文件系统这外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”;
挂载点:mount_point。用于作为另一个文件系统的访问入口;
(1) 事先存在;
(2) 应该使用未被或不会被其它进程使用到的目录;
(3) 挂载点下原有的文件将会被隐藏;
mount
mount a filesystem
mount [-nrw] [-t vfstype] [-o options] device dir
-a, --all:挂载所有/dev/fsab文件中指定的文件系统
-r, --read-only:只读挂载
-w, --rw:读写挂载
-n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性;
-L label:用卷标指定设备名
-U uuid:用UID指定设备名
-t, --types vfstype:指定挂载格式
-o, --options opts:指定挂载选项
sync/async:同步/异步操作;
atime/noatime:文件或目录在被访问时是否更新其访问时间戳;
diratime/nodiratime:目录在被访问时是否更新其访问时间戳;
remount:重新挂载;
acl:支持使用facl功能;
# mount -o acl device dir
# tune2fs -o acl device
ro:只读
rw:读写
dev/nodev:此设备上是否允许创建设备文件;
exec/noexec:是否允许运行此设备上的程序文件;
auto/noauto:
user/nouser:是否允许普通用户挂载此文件系统;
suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;
defaults:默认权限。
包括rw, suid, dev, exec, auto, nouser, async, and relatime.
查看所有挂载:
(1)mount
(2)cat /etc/mtab
(3)cat /proc/mounts
挂载光盘:
mount -r dev/cdrom MOUNT_POINT
挂载本地回环设备(iso,img)
mount -o loop /LOOP_FILE MOUNT_POINT
umount
unmount file systems
查看挂载点正在被谁占用:
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有正在访问挂载点的进程
fuser -km MOUNT_POINT
开机自动挂载:
相关文件:/etc/fstab
格式:每行定义一个挂载文件系统及相关属性
挂载设备 挂载点 文件系统类型 挂载选项 转储频率 自检次序
(1)挂载设备:
可以是设备文件路径、LABEL=<label>、UUID=<uuid>、伪文件系统(如sysfs/proc/tmpfs等)
(2)挂载点:
swap的挂载点直接写“swap”即可
(3)文件系统类型
(4)挂载选项:
多个选项以逗号分隔
(5)转储频率:
0:从不备份
1:每天备份
2:每隔一天备份
(6)自检次序
0:不自检
1:首先自检,通常只有根文件设置为1
2:次级自检
...
(五)文件系统、目录容量统计工具
df
report file system disk space usage
df [OPTION]... [FILE]...
-i, --inodes:显示inode使用情况
-h, --human-readable
--total:显示总结信息
-l, --local:仅显示本地磁盘
-t, --type=TYPE:仅显示指定文件系统类型的分区
-T, --print-type:显示文件系统类型列
du
estimate file space usage
du [OPTION]... [FILE]...
-h, --human-readable
-s, --summarize
--max-depth=N
|