文件系统管理
磁盘结构
目录
- 硬盘的大小是使用“磁头数×柱面数×扇区数×每个扇区的大小”这样的公式来计算的。其中磁头数(Heads)表示硬盘总共有几个磁头也可以理解成为硬盘有几个盘面,然后乘以二;柱面数(Cylinders)表示硬盘每一面盘片有几条磁道;扇区数(Sectors)表示每条磁道上有几个扇区;每个扇区的大小一般是 512Byte。
-
磁盘接口
- IDE 硬盘接口(Integrated Drive Electronics,并口,即电子集成驱动器)也称作“ATA 硬盘”或“PATA 硬盘”,是早期机械硬盘的主要接口,ATA133 硬盘的理论速度可以达到 133MB/s(此速度为理论平均值),IDE 硬盘接口
- SATA 接口(Serial ATA,串口)是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。目前已经是 SATA 三代,理论传输速度达到 600MB/s(此速度为理论平均值)
- SCSI 接口(Small Computer System Interface,小型计算机系统接口)广泛应用在服务器上,具有应用范围广、多任务、带宽大、CPU 占用率低及支持热插拔等优点,理论传输速度达到320MB/s
文件系统
-
Linux 文件系统的特性:
super block
(超级块):记录整个文件系统的信息,包括block与inode的总量,已经使用inode和block的数量,未使用的inode和block的数量,未使用的 inode和 block的数量,block与 inode的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间等。date block
(数据块,也称作 block):用来实际保存数据的(柜子的隔断),block 的大小(1KB、2KB或 4KB)和数量在格式化后就已经决定,不能改变,除非重新格式化(制作柜子的时候,隔断大小就已经决定,不能更改,除非重新制作柜子)。每个 blcok只能保存一个文件的数据,要是文件数据小于一个 block块,那么这个 block的剩余空间不能被其他文件是要;要是文件数据大于一个 block块,则占用多个 block块。Windows中磁盘碎片整理工具的原理就是把一个文件占用的多个 block块尽量整理到一起,这样可以加快读写速度。inode
(i 节点,柜子门上的标签):用来记录文件的权限(r、w、x),文件的所有者和属组,文件的大小,文件的状态改变时间(ctime),文件的最近一次读取时间(atime),文件的最近一次修改时间(mtime),文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。
-
Linux常见文件系统
文件 系统 | 描述 |
---|---|
ext | Linux中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用 |
ext2 | 是 ext文件系统的升级版本,Red Hat Linux 7.2版本以前的系统默认都是 ext2文件系 统 。 于 1993 年 发 布 , 支 持 最 大 16TB 的 分 区 和 最 大 2TB 的 文 件(1TB=1024GB=1024×1024KB) |
ext3 | 是 ext2 文件系统的升级版本,最大的区别就是带日志功能,以便在系统突然停止时提高文件系统的可靠性。支持最大 16TB的分区和最大 2TB的文件 |
ext4 | 是 ext3文件系统的升级版。ext4 在性能、伸缩性和可靠性方面进行了大量改进。ext4的变化可以说是翻天覆地的,比如向下兼容 ext3、最大 1EB文件系统和 16TB文件、无限数量子目录、Extents连续数据块概念、多块分配、延迟分配、持久预分配、快速 FSCK、日志校验、无日志模式、在线碎片整理、inode增强、默认启用 barrier等。它是 CentOS6.x的默认文件系统 |
xfs | XFS最早针对 IRIX操作系统开发,是一个高性能的日志型文件系统,能够在断电以及操作系统崩溃的情况下保证文件系统数据的一致性。它是一个 64 位的文件系统,后来进行开源并且移植到了 Linux 操作系统中,目前 CentOS 7.x 将 XFS+LVM 作为默认的文件系统。据官方所称,XFS对于大文件的读写性能较好。 |
swap | swap是 Linux中用于交换分区的文件系统(类似于 Windows中的虚拟内存),当内存不够用时,使用交换分区暂时替代内存。一般大小为内存的 2倍,但是不要超过 2GB。它是 Linux的必需分区 |
NFS | NFS是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源 |
iso9600 | 光盘的标准文件系统。Linux要想使用光盘,必须支持 iso9660文件系统 |
fat | 就是 Windows下的 fat16文件系统,在 Linux中识别为 fat |
vfat | 就是 Windows下的 fat32文件系统,在 Linux中识别为 vfat。支持最大 32GB的分区和最大 4GB的文件 |
NTFS | 就是 Windows下的 NTFS文件系统,不过 Linux默认是不能识别 NTFS文件系统的,如果需要识别,则需要重新编译内核才能支持。它比 fat32文件系统更加安全,速度更快,支持最大 2TB的分区和最大 64GB的文件 |
ufs | Sun公司的操作系统 Solaris和 SunOS所采用的文件系统 |
proc | Linux中基于内存的虚拟文件系统,用来管理内存存储目录/proc |
sysfs | 和 proc一样,也是基于内存的虚拟文件系统,用来管理内存存储目录/sysfs |
tmpfs | 也是一种基于内存的虚拟文件系统,不过也可以使用 swap交换分区 |
常见的磁盘管理命令
df 统计磁盘剩余空间大小
[root@iZbp10cdilkxcswm4l893lZ ~]# df [选项] [目录或文件名]
选项
-a 显示特殊文件系统
-h 人性化显示 KB,MB
-T 多出了文件系统类型一列
du 统计文件大小
[root@iZbp10cdilkxcswm4l893lZ ~]# du [选项] [目录或文件名]
选项
-a 显示每个子文件的磁盘占用量
-h 人性化显示 KB,MB
-s 统计占用量,不显示出子目录和子文件的占用量
fsck 文件系统修复命令
[root@iZbp10cdilkxcswm4l893lZ ~]# fsck -y /dev/vda1 //自动修复
fsck from util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
/dev/vda1 is mounted.
e2fsck: Cannot continue, aborting.
dumpe2fs 显示磁盘状态
[root@iZbp10cdilkxcswm4l893lZ ~]# dumpe2fs -h /dev/vda1 //显示磁盘状态
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: <none> //卷标名
Last mounted on: / //挂载点
Filesystem UUID: 1114fe9e-2309-4580-b183-d778e6d97397
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl //挂载参数
Filesystem state: clean //文件系统状态,正常
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 2621440 //inode总数
Block count: 10484164 //块总数
Reserved block count: 471777
Free blocks: 9287867
Free inodes: 2495670
First block: 0
Block size: 4096 //块大小
Fragment size: 4096
stat 查看文件的详细信息
[root@iZbp10cdilkxcswm4l893lZ ~]# stat test.sh //查看test.sh文件详细信息
File: ‘test.sh’ //文件名
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
//文件大小 占用块 系统分区块大小
Device: fd01h/64769d Inode: 917519 Links: 1
//存放文件的设备 inode号 硬链接数
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
//权限 属主 数组
Access: 2020-09-22 09:31:48.312915609 +0800 //访问时间
Modify: 2020-09-22 09:31:48.312915609 +0800 //数据修改时间
Change: 2020-09-22 09:31:48.312915609 +0800 //状态修改时间
Birth: -
type file判断文件类型
[root@iZbp10cdilkxcswm4l893lZ ~]# file 文件名 //判断文件类型
[root@iZbp10cdilkxcswm4l893lZ ~]# type 命令名 //判断命令类型
fdisk 命令手工分区
只能分MBR分区表,不能分区GPT分区
新硬盘分区步骤
- 关机添加硬盘
- 分区(主分区或逻辑分区、分区号、大小)
- 格式化
- 挂载
分区
-
n—p主----1分区号----1起始柱面-----分区大小+100M-----w
-
n—e扩展—2分区号—124起始柱面----1024柱面(所有剩余空间都分配给扩展分区)
-
n—l逻辑—不用指定分区号—124起始柱面----+100M(指定大小)-----w
[root@localhost ~]# fdisk -l //查看系统所有硬盘及分区
Disk /dev/sda: 20 GiB, 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
Disklabel type: dos
Disk identifier: 0xb565d87c
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 41943039 39843840 19G 8e Linux LVM
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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 /dev/mapper/cl-root: 17 GiB, 18249416704 bytes, 35643392 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 /dev/mapper/cl-swap: 2 GiB, 2147483648 bytes, 4194304 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
[root@localhost ~]# fdisk -l
Disk /dev/sda: 20 GiB, 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
Disklabel type: dos
Disk identifier: 0xb565d87c
[root@localhost ~]# fdisk /dev/sdb //开始分区进入硬盘
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xdfb50382.
Command (m for help): n //新建分区
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p //如上p代表 选择主分区 e 代表选择扩展分区
Partition number (1-4, default 1): 1 //分区的驱动号为1
First sector (2048-20971519, default 2048): //分多少扇区 默认为2048 可按回车
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +1G //给主分区分多少 +1G 代表分区1G
Created a new partition 1 of type 'Linux' and of size 1 GiB.
Command (m for help): w //保存退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
命令 | 说明 |
---|---|
a | 设置可引导标记 |
b | 编辑bsd磁盘标签 |
c | 设置DOS操作系统兼容标记 |
d | 删除一个分区 |
l | 显示已知的文件系统类型 82为Linux swap分区 83为Linux分区 |
m | 显示帮助菜单 |
n | 新建分区 |
o | 建立空白DOS分区表 |
p | 显示分区列表 |
q | 不保存退出 |
s | 新建空白SUN磁盘标签 |
t | 改变一个分区的系统ID |
u | 改变显示记录单位 |
v | 验证分区表 |
w | 保存退出 |
格式化
//mkfs 不能调整分区的默认参数
[root@localhost ~]# mkfs -t ext4 /dev/sdb1
// 格式化 -t 建立文件系统 磁盘位置
mke2fs 1.44.6 (5-Mar-2019)
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: 62259879-3c50-4095-9ebe-ee7741aa531e
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
// ----------------mke2fs 可以调整分区的默认参数--------------------
[root@localhost ~]# mke2fs [选项] 分区设备文件名
-t 文件系统 //指定格式化那个文件系统,ext2 ext3
-b 字节 //指定block块的大小
-i 字节 //指定 字节/inode 的比例
-j //建立带有ext3 日志功能的文件系统
-L 卷标名 //给文件系统设置卷标名,就不能使用e21abel命令设定了
挂载
[root@localhost ~]# mkdir /disk1 // 1.创建挂载目录
[root@localhost ~]# ls /
bin dev disk1 home lib64 mnt proc run srv test usr
boot disk etc lib media opt root sbin sys tmp var
[root@localhost ~]# mount /dev/sdb1 /disk1 // 2.挂载到目录下
自动挂载
- 修改分区自动挂载文件,可以用UUID挂载也可以用磁盘详细路径挂载
[root@localhost ~]# vi /etc/fstab //修改分区自动挂载文件
UUID=b03826e6-79c2-4f0b-8b03-e714094e26af /boot ext4 defaults 1 2
//设备文件名 挂载点 文件系统 挂载选项
//第五列 1可以备份 0不备份 1 每天备份 2不定期备份
//第六列 2是否检测磁盘 fsck 0不检测 1启动是检测 2启动后检测
//查看系统 UUID
[root@localhost ~]# dumpe2fs /dev/sdb1
[root@localhost ~]# dumpe2fs /dev/sdb
sdb sdb1
[root@localhost ~]# dumpe2fs /dev/sdb
sdb sdb1
[root@localhost ~]# dumpe2fs /dev/sdb1
dumpe2fs 1.44.6 (5-Mar-2019)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 62259879-3c50-4095-9ebe-ee7741aa531e //磁盘UUID
//…………………………此处省略……………………
或者
[root@localhost ~]# ls -l /dev/disk/by-uuid/ //查看系统所有磁盘的UUID
total 0
lrwxrwxrwx. 1 root root 9 Sep 21 22:01 2020-01-03-21-42-40-00 -> ../../sr0
lrwxrwxrwx. 1 root root 10 Sep 21 22:01 61c13acc-51d5-47a0-9bcc-0d00792ce99a -> ../../dm-0
lrwxrwxrwx. 1 root root 10 Sep 21 23:43 62259879-3c50-4095-9ebe-ee7741aa531e -> ../../sdb1
lrwxrwxrwx. 1 root root 10 Sep 21 22:01 b03826e6-79c2-4f0b-8b03-e714094e26af -> ../../sda1
lrwxrwxrwx. 1 root root 10 Sep 21 22:01 e9fc89a9-476c-4264-b825-bb1ce544ddf3 -> ../../dm-1
parted 命令分区
- MBR分区表:支持的最大分区是2TB(1TB=1024GB);最多支持4个主分区,或3个主分区1个扩展分区
- GPT分区表:支持最大18EB的分区
(1EB=1024PB=1024*1024TB)
;最多支持128个分区,其他中1个系统保留分区,127个用户自定义分区
parted 交互模式
parted交互命令 | 说明 |
---|---|
help [COMMAND] | 显示所有的命令帮助 |
mklabel,mktable LABEL-TYPE | 创建新的磁盘卷标(分区表) |
mkpart PART-TYPE [FS-TYPE] START END | 创建一个分区 |
name NUMBER NAME | 给分区命名 |
显示分区表等信息 | |
quit | 退出 |
rescue START END | 修复丢失的分区 |
resizepart NUMBER END | 修改分区大小 |
rm NUMBER | 删除分区 |
select DEVICE | 选择需要编辑的设备 |
disk_set FLAG STATE | 更改选定设备上的标志 |
disk_toggle [FLAG] | 在选中时切换标志的状态 |
set NUMBER FLAG STATE | 更改分区号上的标志 |
toggle [NUMBER [FLAG]] | 切换分区上标志的状态 |
unit UNIT | 设置默认的单位 |
version | 显示版本 |
parted 创建分区
- 修改分区表
- 建立分区
[root@localhost ~]# parted /dev/sdb //进入parted分区
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print //打印分区
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos //分区表类型,就是MBR分区
Disk Flags:
//分区号 分区起始位置 分区结束位置 大小 类型 文件系统类型 标志
Number Start End Size Type File system Flags
1 1049kB 1075MB 1074MB primary ext4
//--------------------修改分区-----------------------------------
(parted) mklabel gpt //修改分区表 此时为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? yes // 输入yes
//---------------------建立分区----------------------------------
(parted) mkpart //创建新的磁盘卷标(分区表)
Partition name? []? disk2 //分区名字
File system type? [ext2]? //分区类型
Start? 1 //分区从1MB开始
End? 2GB //分区到2GB结束
(parted) print //分区打印
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2000MB 1999MB ext2 disk2
调整分区大小
删除分区
swap分区
- 添加硬盘、新建分区
- 格式化
- 使用swap分区
//------------------新建分区--------------------------
[root@localhost ~]# fdisk /dev/sdb
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +5G
Do you want to remove the signature? [Y]es/[N]o: Y
Command (m for help): p //打印
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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
Disklabel type: dos
Disk identifier: 0xe669ff7c
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10487807 10485760 5G 83 Linux //分第一个区
Filesystem/RAID signature on partition 1 will be wiped.
//-----------------创建swap分区---------------------------------
Command (m for help): t //修改分区的系统ID
Selected partition 1 //只有一个分区,不用选择分区了
Hex code (type L to list all codes): 82 //swap分区的ID为 82
Changed type of partition 'FAT12' to 'Linux swap / Solaris'.
Command (m for help): w //保存并退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
//---------------------------格式化成为swap分区---------------------------
[root@localhost ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 5 GiB (5368705024 bytes)
no label, UUID=12fd3a49-11f9-4647-b8cd-50ce5844b453
//----------------------查看---------------------------------
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.8Gi 209Mi 1.3Gi 8.0Mi 217Mi 1.4Gi
Swap: 2.0Gi 0B 2.0Gi
//------------------挂载swap分区------------------------------
[root@localhost ~]# swapon /dev/sdb1 //类似于mount挂载光盘
[root@localhost ~]# vim /etc/fstab //设置开机自动挂载swap分区
/dev/sdb1 swap swap defaults 0 0