写在前面:
博客书写牢记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
实例:
#在/tmp下新建/etc/fstab的硬链接文件并查看: [root@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 [root@localhost ~]# ls -l /etc/fstab -rw-r--r-- 1 root root 921 Mar 12 11:56 /etc/fstab [root@localhost ~]# ln /etc/fstab /tmp/new.fstab [root@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 [root@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)测试 [root@localhost ~]# ln -s /etc/fstab /tmp/fstab.symbolic-link [root@localhost ~]# ln -s /etc/fstab /var/fstab.symbolic-link [root@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版本上根目录下的许多目录都是软链接而已 [root@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 [root@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:以指定的特性创建目标文件系统;
实例:
#在/dev/sda磁盘中新建一个分区,并格式化为ext4类型,指明块大小为4K,卷标为MYDATA,预留空间为2%。 [root@localhost ~]# fdisk /dev/sda ...分区过程省略... [root@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 [root@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 [root@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 ]
是设置或查看卷标的命令
实例:
[root@localhost ~]# e2label /dev/sda5 MTDATA [root@localhost ~]# e2label /dev/sda5 MYDATA [root@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:不输出块组信息
实例:
#重新格式化刚才分区格式为ext2,并挂载到/mnt/mydata,然后使用tune2fs修改文件系统类型为ext3,修改卷标为MYDATA,修改预留空间为2%,并设置挂载时默认禁用acl。 [root@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. [root@localhost ~]# blkid /dev/sda5 /dev/sda5: UUID="92a982f0-3cf6-4388-ad92-1a4d8836db01" TYPE="ext2" [root@localhost ~]# mount /dev/sda5 /mnt/mydata/ [root@localhost ~]# cp /var/log/messages /mnt/mydata/ [root@localhost ~]# ls /mnt/mydata/ lost+found messages [root@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. [root@localhost ~]# mount -o remount /dev/sda5 /mnt/mydata [root@localhost ~]# blkid /dev/sda5 /dev/sda5: LABEL="MYDATA" UUID="92a982f0-3cf6-4388-ad92-1a4d8836db01" SEC_TYPE="ext2" TYPE="ext3" [root@localhost ~]# ls /mnt/mydata lost+found messages [root@localhost ~]# cd /mnt/mydata/ [root@localhost mydata]# useradd fred [root@localhost mydata]# getfacl messages # file: messages # owner: root # group: root user::rw- group::--- other::--- [root@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]挂载并启用。
实例:
#新建一个4G分区,并挂载为swap,设置开机挂载 [root@localhost ~]# fdisk /dev/sda ...步骤省略,记得调整分区类型为82... [root@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 [root@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 [root@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 [root@localhost ~]# free -m total used free shared buff/cache available Mem: 977 148 623 6 205 647 Swap: 2048 0 2048 [root@localhost ~]# swapon /dev/sda8 [root@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