Linux磁盘及文件系统管理
CPU, Memory(RAM), I/O I/O: Disks, Ehtercard Disks: 持久存储数据
1 磁盘管理
1.1 硬盘接口类型
IDE(ata):并口,133MB/s SCSI:并口,Ultrascsi320, 320MB/S, UltraSCSI640, 640MB/S SATA:串口,6gbps SAS:串口,6gbps USB:串口,480MB/s 并口:同一线缆可以接多块设备; IDE:两个,主,从 SCSI: 宽带:16-1 窄带:8-1 串口:同一线缆只可以接一个设备; IOPS:io per second(IO每秒)1.2 硬盘类型
硬盘:机械硬盘,固态硬盘;1.2.1 机械硬盘
track:磁道 sector:扇区,512bytes cylinder:柱面 分区划分基于柱面: 平均寻道时间: 5400rpm, 7200rpm, 10000rpm, 15000rpm Linux的哲学思想:一切皆文件; 设备类型: 块(block):随机访问,数据交换单位是“块”; 字符(character):线性访问,数据交换单位是“字符”;1.2.2 固态硬盘
1.3 设备文件:FHS
/dev 设备文件:关联至设备的驱动程序;设备的访问入口; 设备号: major:主设备号,区分设备类型;用于标明设备所需要的驱动程序; minor:次设备号,区分同种类型下的不同的设备;是特定设备的访问入口; mknod命令: make block or character special files mknod [OPTION]... NAME TYPE [MAJOR MINOR] -m MODE:创建后的设备文件的访问权限;1.3.1 设备文件名:ICANN
磁盘命名方式: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]# 引用设备的方式: 设备文件名 卷标 UUID
1.4 磁盘分区
磁盘分区:MBR, GPT1.4.1 MBR(Master Boot Record)
MBR(Master Boot Record):0 sector 主引导记录 MBR分为三部分: 446bytes:bootloader(引导装载程序),引导启动操作系统的程序; 64bytes:分区表,每16bytes标识一个分区,一共只能有4个分区; 4主分区 3主1扩展: n逻辑分区 2bytes:MBR区域的有效性标识;55AA为有效; 主分区和扩展分区的标识序号是:1-4 逻辑分区序号:5+,从5开始1.4.2 GPT
GPT:(GUID Partition Table)全局唯一标识分区表,是一个较新的分区机制,解决了MBR很多缺点 支持超过2T的磁盘(64位寻址空间)。fdisk最大只能建立2TB大小的分区,创建一个大于2TB的分区使用parted 向后兼容MBR 必须在支持uEFI的硬件上才能使用(Intel提出,用于取代BIOS) 必须使用64位系统 Mac、Linux系统都能支持GPT分区格式 Windows 7/8 64bit、Windows Server 2008 64bit支持GPT1.5 fdisk 命令
1、查看磁盘的分区信息:fdisk -l [-u] [device...]:列出指定磁盘设备上的分区情况; 2、管理分区 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] 示例:
[root@CentOS7-171 ~]# cat /proc/partitions
major minor #blocks name
8 0 125829120 sda
8 1 512000 sda1
8 2 52428800 sda2
8 3 1048576 sda3
8 4 1 sda4
8 5 10485760 sda5
11 0 4228096 sr0
[root@CentOS7-171 ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-5
[root@CentOS7-171 ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-7
[root@CentOS7-171 ~]# cat /proc/partitions
major minor #blocks name
8 0 125829120 sda
8 1 512000 sda1
8 2 52428800 sda2
8 3 1048576 sda3
8 4 1 sda4
8 5 10485760 sda5
8 6 10485760 sda6
8 7 2097152 sda7
11 0 4228096 sr0
分区创建工具:parted, sfdisk;
2 创建文件系统
格式化: 低级格式化(分区之前进行,划分磁道) 高级格式化(分区之后对分区进行,创建文件系统)元数据区,数据区 元数据区: 文件元数据:inode(index node) 大小、权限、属主属组、时间戳、数据块指针
符号链接文件:存储数据指针的空间当中存储的是真实文件的访问路径; 设备文件:存储数据指针的空间当中存储的是设备号(major, minor); bitmap index:位图索引
2.1 VFS(Virtual File System)
Linux的文件系统: ext2(无日志功能), 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, glusterfs2.2 文件系统管理工具
2.2.1 创建文件系统的工具
mkfs mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...2.2.1.1 ext系列文件系统的管理工具
mkfs.ext2, mkfs.ext3, mkfs.ext4 mkfs -t ext2 = mkfs.ext2
[root@Centos6.8-180 ~]# mkfs.ext2 /dev/sda3
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2620699 blocks
131034 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
正在写入inode表: 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@Centos6.8-180 ~]# blkid /dev/sda3
/dev/sda3: UUID="f6bfa911-010c-4d39-83df-06bfce7cd572" TYPE="ext4"
2.2.1.2 ext系列文件系统专用管理工具
2.2.1.2.1 mke2fs命令
mke2fs [OPTIONS] device -t {ext2|ext3|ext4}:指明要创建的文件系统类型 mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4 -b {1024|2048|4096}:指明文件系统的块大小; -L LABEL:指明卷标; -j:创建有日志功能的文件系统ext3; mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3 -i #:bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode; -N #:直接指明要给此文件系统创建的inode的数量; -m #:指定预留的空间,百分比; -O [^]FEATURE:以指定的特性创建目标文件系统;加[^]表示关闭此特性,不加则是开户此特性2.2.2 检测及修复文件系统工具
ext系列文件系统的专用工具:2.2.2.1 e2fsck命令
e2fsck : check a Linux ext2/ext3/ext4 file system e2fsck [OPTIONS] device -y:对所有问题自动回答为yes; -f:即使文件系统处于clean状态,也要强制进行检测;2.2.2.2 fsck命令: fsck:check and repair a Linux file system用于实现文件系统检测的工具 因进程意外中止或系统崩溃等 原因导致定稿操作非正常终止时,可能会造成文件损坏;此时,应该检测并修复文件系统;建议,离线进行; -t fstype:指明文件系统类型; fsck -t ext4 = fsck.ext4 -a:无须交互而自动修复所有错误; -r:交互式修复;
2.2.3 查看其属性的工具
2.2.3.1 dumpe2fs命令
dumpe2fs命令:显示ext系列文件系统的属性信息 dumpe2fs [-h] device2.2.3.2 e2lable命令
e2label命令:卷标的查看与设定 查看:e2label device 设定:e2label device LABEL
[root@Centos6.8-180 ~]# e2label /dev/sda3
[root@Centos6.8-180 ~]# e2label /dev/sda3 MYDATA
[root@Centos6.8-180 ~]# e2label /dev/sda3
MYDATA
[root@Centos6.8-180 ~]# blkid /dev/sda3/dev/sda3: UUID="98873684-812d-40ae-86ad-5065e17d205b" SEC_TYPE="ext2" TYPE="ext3" LABEL="MYDATA"
2.2.4 调整文件系统特性
tune2fs命令 tune2fs [OPTIONS] device -l:查看超级块的内容; 修改指定文件系统的属性: -j:ext2 --> ext3; -L LABEL:修改卷标; -m #:调整预留空间百分比; -O [^]FEATHER:开启或关闭某种特性; -o [^]mount_options:开启或关闭某种默认挂载选项 acl ^acl tune2fs命令:查看或修改ext系列文件系统的某些属性 adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems; 注意:块大小创建后不可修改;2.3 链接文件
链接文件:访问同一个文件不同路径;2.3.1 硬链接
硬链接:指向同一个inode的多个文件路径; 特性: (1)目录不支持硬链接; (2)硬链接不能跨文件系统; (3)创建硬链接会增加inode引用计数; 创建硬链接: ln src link_file
[root@CentOS7-171 ~]# ln fstab.new fstab2
2.3.2 符号链接
符号链接:指向一个文件路径的另一个文件路径; 特性: (1)符号链接与文件是两人个各自独立的文件,各有自己的inode;对原文件创建符号链接不会增加引用计数; (2)支持对目录创建符号链接,可以跨文件系统; (3)删除符号链接文件不影响原文件;但删除原文件,符号指定的路径即不存在,此时会变成无效链接; 符号链接权限:lrwxrwxrwx注意:符号链接文件的大小是其指定的文件的路径字符串的字节数; 创建符号链接: ln -s src link_file -v:verbose
[root@CentOS7-171 ~]# ln -s fstab fstab.link
磁盘和文件 内核级文件系统的组成部分: 文件系统驱动:由内核提供 文件系统理工具:由用户空间的应用程序提供 CentOS 6如何使用xfs文件系统:
创建:mkfs.xfs 检测:fsck.xfs
# yum -y install xfsprogs
[root@Centos6.8-180 ~]# mkfs.xfs -f /dev/sda3
meta-data=/dev/sda3 isize=256 agcount=4, agsize=655175 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=2620699, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
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
[root@Centos6.8-180