- 文件系统建立在磁盘上
- ext2、ext3、ext4和xfs
- inode、数据区块(block)和超级区块(superblock)
磁盘组成与分区
整块磁盘组成
- 圆形碟片(主要记录数据的部分)
- 机械手臂,与机械手臂上的磁头(擦写磁片上的数据)
- 主轴马达,用于转动碟片,让机械手臂的磁头在碟片上读写数据
碟片物理组成
- 扇区(Sector):最小物理存储单位,依据磁盘设计的不同,目前主要有512B与4KB两种格式
- 柱面:扇区组成的一个圆
- 现在的分区通常使用扇区为最小分区单位,每个扇区都有其号码(早期分区以柱面为最小分区单位)
- 磁盘分区表主要有两种格式:1. 限制较多的MBR分区表。2. 较新且限制较少的GPT分区表
- MBR分区表:第一个扇区最重要,其包括:主引导记录(Master boot record,MBR)及分区表(partition table),其中MBR占446B,分区表占64B
- GPT分区表除了分区数量扩充较多,支持的磁盘容量也可超过2TB
磁盘文件名
- 所有的物理磁盘文件名都被模拟成
的格式,第一块磁盘文件名为/dev/sd[a-p]
/dev/sda
- 分区的文件名若以第一块磁盘为例,则为
/dev/sda[1-128]
- 通常虚拟机的磁盘文件名也被命名为
/dev/vd[a-p]
- 若使用到软件磁盘阵列,可能文件名还有
,使用LVM时,文件名则为/dev/md[0-128]
/dev/VGNAME/LVNAME
文件系统特性
- 磁盘分区完还需要进行格式化(format),之后操作系统才能够使用这个文件系统。
- Why格式化?因为每种操作系统所设置的文件属性、权限并不相同,为了存放这些文件所需数据,因此就需要将分区格式化,以成为操作系统能够利用的文件系统格式(filesystem)
- 每种操作系统能够使用的文件系统并不相同。 win98(FAT或FAT16),Windows 2000及以后(NTFS),Linux(ext2)
- 传统磁盘与文件系统,一个分区只能被格式化成为一个文件系统,因此认为一个文件系统就是一个硬盘分区
- 新技术利用,LVM和磁盘阵列,可以将一个分区格式化为多个文件系统,也能够将多个分区合成一个文件系统。
- 一个可被挂载的数据为一个文件系统而不是一个分区。
- 较新的操作系统的文件除了文件实际内容之外,通常含有非常多的属性,如文件权限(rwx)与文件属性(拥有者、用户组、时间参数等)
- 文件系统通常将这两部分数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到数据区块中
- 超级区块(superblock):记录整个文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量,以及文件系统的格式和相关信息等
- inode:记录文件属性,一个文件占用一个inode,同时记录此文件的数据所在的区块号码
- 数据区块:实际记录文件的内容,若文件太大,会占用多个区块。
Linux的ext2文件系统(inode)
- 文件系统一开始就将inode与数据区块规划好了,除非重新格式化(或利用resize2fs等命令修改其大小),否则inode与数据区块固定后就不在变动
- ext2文件系统格式化的时候基本上是区分为多个区块群组(block group),每个区块群组都有独立的inode、数据区块、超级区块系统。
- 在整体规划当中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装启动引导程序。
- ext2文件系统支持数据区块大小有1K、2K和4K三种,数据区块大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同
Block大小 | 1K | 2K | 4K |
---|---|---|---|
最大单一文件限制 | 16GB | 256GB | 2TB |
最大文件系统总容量 | 2TB | 8TB | 16TB |
ext2文件系统区块限制:
- 原则上,区块的大小与数量在格式化完就不能够再修改
- 每个区块内最多只能够放置一个文件的数据
- 如果文件大于区块的大小,则一个文件会占用多个区块数量
- 如果文件小于区块,则该区块的剩余容量就不能再被使用
inode table
inode的内容记录文件的属性以及该文件实际数据放置在哪几个区块内。基本上,inode记录的数据至少有:
- 该文件的读写属性(r 、 w、 x)
- 该文件的拥有者和用户组
- 该文件的大小
- 该文件的建立或状态改变时间(ctime)
- 最近一次的读取时间(atime)
- 最近修改时间(mtime)
- 定义文件特性的标识(flag)
- 该文件真正内容的指向
inode的数量和大小也是在格式化时就已固定:
- 每个inode大小均固定为128B(ext4和xfs可设置为256B)
- 每个文件都仅会占用一个inode
- 文件系统能够建立的文件数量与inode的数量有关
- 系统读取文件需要先找到inode,并分析inode所记录的权限与用户是否符合,如符合才能够读取区块的内容。
超级区块(super block)
超级区块是记录整个文件系统相关信息的地方:
- 数据区块与inode的总量
- 未使用与已使用的inode和数据区块数量
- 数据区块和inode的大小
- 文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息
- 一个有效数值,若此文件系统已被挂载,则有效 位为0,若未被挂载,则有效位为1.
dumpe2fs:查看ext系列超级区块信息命令
centos7位xfs默认文件系统,无法使用dumpe2fs查询。
目录
文件系统会分配一个inode和至少一块区块给目录
Linux文件系统的运行
Linux系统上面的文件系统与内存有非常大的关系
- 系统会将常用的文件数据放置到内存的缓冲区,以加速文件系统的读写操作
- 手动使用
来强制内存中设置为Dirty的文件回写到磁盘中sync
- 正常关机,关机命令会主动调用sync来讲内存的数据回写入磁盘
- 不正常关机(断电、宕机等),由于数据尚未回写到磁盘,因此重新启动后可能会花很多时间在进行磁盘校验,甚至可能导致文件系统损坏(非磁盘损坏)。
挂载点的意义
文件系统要能够连接到目录树才能被我们使用。将文件系统与目录树结合的操作称为【挂载】
- 挂载点一定是目录,该目录为进入该文件系统的入口
- 并不是任何文件系统都能使用,必须要挂载到目录树的某个目录后,才能够使用该文件系统
其他Linux支持的文件系统与VFS
- 传统文件系统:ext2、minix、FAT(用vfat模块)、iso9660(光盘)等
- 日志式文件系统:ext3、ext4、ReiserFS、windows’s NTFS、IBM’s JFS、SGI’s XFS、ZFS
- 网络文件系统:NFS、SMBFS
查看linux支持哪些文件系统:
[[email protected] ~]# ls -l /lib/modules/$(uname -r)/kernel/fs
total 20
-rw-r--r--. 1 root root 5992 Jun 23 23:58 binfmt_misc.ko.xz
drwxr-xr-x. 2 root root 25 Jun 26 13:50 btrfs
drwxr-xr-x. 2 root root 30 Jun 26 13:50 cachefiles
drwxr-xr-x. 2 root root 24 Jun 26 13:50 ceph
drwxr-xr-x. 2 root root 24 Jun 26 13:50 cifs
drwxr-xr-x. 2 root root 26 Jun 26 13:50 cramfs
drwxr-xr-x. 2 root root 23 Jun 26 13:50 dlm
drwxr-xr-x. 2 root root 26 Jun 26 13:50 exofs
drwxr-xr-x. 2 root root 24 Jun 26 13:50 ext4
drwxr-xr-x. 2 root root 60 Jun 26 13:50 fat
drwxr-xr-x. 2 root root 27 Jun 26 13:50 fscache
drwxr-xr-x. 2 root root 42 Jun 26 13:50 fuse
drwxr-xr-x. 2 root root 24 Jun 26 13:50 gfs2
drwxr-xr-x. 2 root root 25 Jun 26 13:50 isofs
drwxr-xr-x. 2 root root 24 Jun 26 13:50 jbd2
drwxr-xr-x. 2 root root 25 Jun 26 13:50 lockd
-rw-r--r--. 1 root root 5212 Jun 23 23:58 mbcache.ko.xz
drwxr-xr-x. 6 root root 137 Jun 26 13:50 nfs
drwxr-xr-x. 2 root root 46 Jun 26 13:50 nfs_common
drwxr-xr-x. 2 root root 24 Jun 26 13:50 nfsd
drwxr-xr-x. 2 root root 4096 Jun 26 13:50 nls
drwxr-xr-x. 2 root root 27 Jun 26 13:50 overlayfs
drwxr-xr-x. 2 root root 27 Jun 26 13:50 pstore
drwxr-xr-x. 2 root root 28 Jun 26 13:50 squashfs
drwxr-xr-x. 2 root root 23 Jun 26 13:50 udf
drwxr-xr-x. 2 root root 23 Jun 26 13:50 xfs
查看系统目前已加载到内存中支持的文件系统:
[[email protected] ~]# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev debugfs
nodev securityfs
nodev sockfs
nodev dax
nodev bpf
nodev pipefs
nodev configfs
nodev devpts
nodev hugetlbfs
nodev autofs
nodev pstore
nodev mqueue
nodev selinuxfs
xfs
nodev rpc_pipefs
nodev overlay
xfs文件系统
xfs文件系统在数据分布上,主要规划为三个部分,一个数据区(data section)、一个文件系统活动登录区(log section)以及一个实时运行区(realtime section)
文件系统操作
磁盘与目录容量
-
:列出文件系统的整体磁盘使用量df
-
:查看文件系统的磁盘使用量(常用在查看目录所占用的磁盘空间)du
df
df [-ahikHTm] [目录或文件名]
-a:列出所有的文件系统,包括系统特有的/proc等文件系统
-k:以KBytes的容量显示各文件系统
-m:以MBytes的容量显示各文件系统
-h:以人们较易读的GBytes、MBytes、KBytes等格式显示
-H:以M=1000K替换M=1024K
-T:连同该硬盘分区的文件系统名称(例如xfs)也列出
-i:不用磁盘容量,而以inode的数量来显示
例:
# 将系统内所有文件全列出来
[[email protected] ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 480820 0 480820 0% /dev
tmpfs 497840 0 497840 0% /dev/shm
tmpfs 497840 8400 489440 2% /run
tmpfs 497840 0 497840 0% /sys/fs/cgroup
/dev/mapper/centos-root 17811456 8585088 9226368 49% /
/dev/sda1 1038336 230048 808288 23% /boot
tmpfs 99572 8 99564 1% /run/user/42
tmpfs 99572 0 99572 0% /run/user/0
=========================================================
Filesystem:代表该文件系统是在哪个硬盘分区,列出设备名称
1k-blocks:说明下面的数字单位为KB,可利用-h或-m改变
Used:使用掉的磁盘容量
Available:剩下的磁盘空间大小
User%:磁盘使用率,如果使用率高达90%,需要注意,免得容量不足造成系统问题
Mounted on:磁盘的挂载目录(挂载点)。
=========================================================
# 将容量结果以易读的格式显示
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 470M 0 470M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.4M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 8.2G 8.9G 49% /
/dev/sda1 1014M 225M 790M 23% /boot
tmpfs 98M 8.0K 98M 1% /run/user/42
tmpfs 98M 0 98M 0% /run/user/0
# 将系统内的所有特殊文件格式及名称都列出来
[[email protected] ~]# df -aT
Filesystem Type 1K-blocks Used Available Use% Mounted on
sysfs sysfs 0 0 0 - /sys
proc proc 0 0 0 - /proc
devtmpfs devtmpfs 480820 0 480820 0% /dev
securityfs securityfs 0 0 0 - /sys/kernel/security
tmpfs tmpfs 497840 0 497840 0% /dev/shm
devpts devpts 0 0 0 - /dev/pts
tmpfs tmpfs 497840 8552 489288 2% /run
tmpfs tmpfs 497840 0 497840 0% /sys/fs/cgroup
cgroup cgroup 0 0 0 - /sys/fs/cgroup/systemd
pstore pstore 0 0 0 - /sys/fs/pstore
cgroup cgroup 0 0 0 - /sys/fs/cgroup/freezer
cgroup cgroup 0 0 0 - /sys/fs/cgroup/cpu,cpuacct
cgroup cgroup 0 0 0 - /sys/fs/cgroup/devices
cgroup cgroup 0 0 0 - /sys/fs/cgroup/cpuset
cgroup cgroup 0 0 0 - /sys/fs/cgroup/perf_event
cgroup cgroup 0 0 0 - /sys/fs/cgroup/hugetlb
cgroup cgroup 0 0 0 - /sys/fs/cgroup/blkio
cgroup cgroup 0 0 0 - /sys/fs/cgroup/pids
cgroup cgroup 0 0 0 - /sys/fs/cgroup/memory
cgroup cgroup 0 0 0 - /sys/fs/cgroup/net_cls,net_prio
configfs configfs 0 0 0 - /sys/kernel/config
/dev/mapper/centos-root xfs 17811456 8560468 9250988 49% /
selinuxfs selinuxfs 0 0 0 - /sys/fs/selinux
systemd-1 autofs 0 0 0 - /proc/sys/fs/binfmt_misc
hugetlbfs hugetlbfs 0 0 0 - /dev/hugepages
mqueue mqueue 0 0 0 - /dev/mqueue
debugfs debugfs 0 0 0 - /sys/kernel/debug
/dev/sda1 xfs 1038336 230048 808288 23% /boot
sunrpc rpc_pipefs 0 0 0 - /var/lib/nfs/rpc_pipefs
/dev/mapper/centos-root xfs 17811456 8560468 9250988 49% /var/lib/docker/containers
/dev/mapper/centos-root xfs 17811456 8560468 9250988 49% /var/lib/docker/overlay2
tmpfs tmpfs 99572 8 99564 1% /run/user/42
tmpfs tmpfs 99572 0 99572 0% /run/user/0
# 将/etc下面的可用的磁盘容量以易读的容量格式显示
[[email protected] ~]# df -h /etc/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 8.2G 8.9G 49% /
# 将目前各个硬盘分区可用的inode数量列出
[[email protected] ~]# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 118K 397 117K 1% /dev
tmpfs 122K 1 122K 1% /dev/shm
tmpfs 122K 954 121K 1% /run
tmpfs 122K 16 122K 1% /sys/fs/cgroup
/dev/mapper/centos-root 8.5M 231K 8.3M 3% /
/dev/sda1 512K 353 512K 1% /boot
tmpfs 122K 9 122K 1% /run/user/42
tmpfs 122K 1 122K 1% /run/user/0
du
du [-ahskm] 文件或目录名称
-a:列出所有的文件与目录容量,因为默认仅统计目录下面的文件量
-h:以人们易读的容量格式(G/M)显示
-s:仅列出总量,而不列出每个各别的目录占用容量
-S:不包括子目录下的总计,与-s优点差别
-k:以KBytes列出
-m:以MBytes列出
例:
# 列出目前目录下的所有文件容量
[[email protected] ~]# du
0 ./apache-tomcat-9.0.37/conf/Catalina/localhost
0 ./apache-tomcat-9.0.37/conf/Catalina
232 ./apache-tomcat-9.0.37/conf
880 ./apache-tomcat-9.0.37/bin
9548 ./apache-tomcat-9.0.37/lib
1848 ./apache-tomcat-9.0.37/logs
0 ./apache-tomcat-9.0.37/temp
4 ./apache-tomcat-9.0.37/webapps/ROOT/WEB-INF
188 ./apache-tomcat-9.0.37/webapps/ROOT
4 ./apache-tomcat-9.0.37/webapps/docs/WEB-INF
4 ./apache-tomcat-9.0.37/webapps/docs/annotationapi
4 ./apache-tomcat-9.0.37/webapps/docs/api
4 ./apache-tomcat-9.0.37/webapps/docs/appdev/sample/docs
4 ./apache-tomcat-9.0.37/webapps/docs/appdev/sample/src/mypackage
4 ./apache-tomcat-9.0.37/webapps/docs/appdev/sample/src
4 ./apache-tomcat-9.0.37/webapps/docs/appdev/sample/web/WEB-INF
4 ./apache-tomcat-9.0.37/webapps/docs/appdev/sample/web/images
16 ./apache-tomcat-9.0.37/webapps/docs/appdev/sample/web
56 ./apache-tomcat-9.0.37/webapps/docs/appdev/sample
156 ./apache-tomcat-9.0.37/webapps/docs/appdev
152 ./apache-tomcat-9.0.37/webapps/docs/architecture/requestProcess
60 ./apache-tomcat-9.0.37/webapps/docs/architecture/startup
232 ./apache-tomcat-9.0.37/webapps/docs/architecture
1040 ./apache-tomcat-9.0.37/webapps/docs/config
4 ./apache-tomcat-9.0.37/webapps/docs/elapi
156 ./apache-tomcat-9.0.37/webapps/docs/funcspecs
148 ./apache-tomcat-9.0.37/webapps/docs/images/fonts
308 ./apache-tomcat-9.0.37/webapps/docs/images
4 ./apache-tomcat-9.0.37/webapps/docs/jaspicapi
4 ./apache-tomcat-9.0.37/webapps/docs/jspapi
....
直接输入du,du会分析【目前所在目录】的文件和目录所占用的磁盘空间,实际显示时,仅会显示目录容量(不含文件),一次(.)目录有很多文件没有被列出
# 将文件的容量也列出
[[email protected] ~]# du -a
# 根目录下每个目录所占用的容量
[[email protected] ~]# du -sm /*
0 /bin
193 /boot
0 /data
0 /dev
60 /etc
1 /home
0 /lib
0 /lib64
0 /media
0 /mnt
0 /opt
du: cannot access ‘/proc/2991/task/2991/fd/3’: No such file or directory
du: cannot access ‘/proc/2991/task/2991/fdinfo/3’: No such file or directory
du: cannot access ‘/proc/2991/fd/3’: No such file or directory
du: cannot access ‘/proc/2991/fdinfo/3’: No such file or directory
0 /proc
499 /root
9 /run
0 /sbin
28 /showdoc_data
144 /srv
0 /sys
9 /tmp
利用*代表每个目录
可以看出哪个子目录占用最大的容量,/usr是整个系统容量最大的,而/proc没有列出容量,它的容量在内存中
不占磁盘空间,至于/proc里面会列出一推错误
硬链接和符号链接
在Linux下面的链接文件分为两种,①类似windows的快捷方式,可以快速链接到目标文件(或目录)—软链接。②通过文件系统的inode链接来产生新文件名,而不是产生新文件—硬链接。
硬链接(hard link)
- 每个文件都会占用一个inode,文件内容由inode的记录来指向
- 想要读取该文件,必须要经过目录记录的文件名来指向到正确的inode号才能读取
- 硬链接可以有多个文件名对应同一个inode号码
- 硬链接知识在某个目录下新增一条文件名链接到某inode号的关联记录
[[email protected] ~]# ln /etc/crontab ./mycrontab
[[email protected] ~]# ll -i /etc/crontab ./mycrontab
17153005 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
17153005 -rw-r--r--. 2 root root 451 Jun 10 2014 ./mycrontab
- 使用硬链接设置链接文件是,磁盘的空间与inode的数目都不会改变
- 硬链接仅能在但以文件系统中进行,不能跨文件系统
- 硬链接不能链接目录
符号链接(Symbolic link)
符号链接就是建立一个独立的文件,而这个文件会让数据的读取指向它链接的那个文件的文件名,如果源文件被删除后,符号链接的文件会【打不开】。
[[email protected] ~]# ln -s /etc/crontab ./mycrontabsym
[[email protected] ~]# ll ./mycrontabsym
lrwxrwxrwx. 1 root root 12 Jul 20 21:46 ./mycrontabsym -> /etc/crontab
[[email protected] ~]# ll -i /etc/crontab ./mycrontabsym
17153005 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
35435013 lrwxrwxrwx. 1 root root 12 Jul 20 21:46 ./mycrontabsym -> /etc/crontab
- 两个文件指向不同的inode号,是两个独立的文件
- 链接文件的重要内容就是它会写上目标文件的文件名
- 符号链接所建立的为一个独立的新文件,会占用inode与区块
-
当修改符号链接文件时,实际修改的是原始文件
注意:
如果使用ln做了下面的链接:
ln -s /bin /root/bin
进入/root/bin目录下删除内容,则相应的/bin目录下面的内容也会被删除。
ln
ln [-sf] 源文件 目标文件
-s: 如果不加进行链接就是硬链接,加上-s,就是符号链接
-f:如果目标文件存在时,就主动将目标文件直接删除后再建立
磁盘的分区、格式化、检验与挂载
如果想在系统里新增一块磁盘,应有哪些操作:
- 对磁盘进行划分,以建立可用的硬盘分区
- 对该硬盘分区进行格式化(format),以建立系统可用的文件系统
- 若想仔细一点,则可对刚刚建立好的文件系统进行检验
- 在Linux系统上,需要建立挂载点(即目录),并将它挂载上来。
观察磁盘分区状态
lsblk(list block device)列出系统上所有的磁盘列表
lsblk [-dfimpt] [device]
-d:仅列出磁盘本身,并不会列出该磁盘的分区数据
-f:同时列出该磁盘内的文件系统名称
-i:使用ASCII的字符输出,不要使用复杂的编码
-m:同时输出该设备在/dev西面的权限信息(rwx数据)
-p:列出该设备的完整文件名,而不是仅列出最后的名字而已
-t:列出该磁盘设备的详细数据,包括磁盘阵列机制、预读写的数据量大小等。
例:
[[email protected] ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 4.4G 0 rom
- NAME: 设备的文件名,省略/dev等前导目录
- MAJ:MIN:内核识别的设备都是通过这两个代码来实现的,分别是主要与次要设备代码
- RM:是否为可卸载设备(removable device),如光盘、USB磁盘等
- SIZE:容量
- RO:是否为只读设备
- TYPE:是磁盘(disk)、分区(part)还是只读存储器(rom)等输出
- MOUNTPOINT:挂载点
# 列出/dev/sda下面所有数据完整文件名
[[email protected] ~]# lsblk -p /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
/dev/sda 8:0 0 20G 0 disk
├─/dev/sda1 8:1 0 1G 0 part /boot
└─/dev/sda2 8:2 0 19G 0 part
├─/dev/mapper/centos-root 253:0 0 17G 0 lvm /
└─/dev/mapper/centos-swap 253:1 0 2G 0 lvm [SWAP]
blkid列出设备的UUID等参数
UUID是全局唯一标识符(universally unique identify),linux会将系统内所有的设备都给予一个独一无二的标识符,这个标识符可以作为挂载或是使用这个设备或文件系统
[[email protected] ~]# blkid
/dev/sda1: UUID="238aa351-5aa8-4cc5-afe7-c5c0399e8223" TYPE="xfs"
/dev/sda2: UUID="1Ue567-hCGb-i9NA-XiR9-HIwQ-uVKu-3nD45H" TYPE="LVM2_member"
/dev/sr0: UUID="2019-09-11-18-50-31-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="1e73f036-8787-40bb-a1f2-34ccedacaca7" TYPE="xfs"
/dev/mapper/centos-swap: UUID="1254d0db-de7c-4944-bc25-3a40e701808c" TYPE="swap"
每行代表一个文件系统,主要列出设备名称、UUID名称以及文件系统的类型
parted列出磁盘的分区表类型与分区信息
parted device name print
使用parted简单列出磁盘的分区类型
[[email protected] ~]# parted /dev/sda print
Model: VMware, VMware Virtual S (scsi) # 磁盘的模块名称(厂商)
Disk /dev/sda: 21.5GB # 磁盘的总容量
Sector size (logical/physical): 512B/512B # 磁盘的每个逻辑/物理扇区容量
Partition Table: msdos # 分区表的格式
Disk Flags:
Number Start End Size Type File system Flags # 分区数据
1 1049kB 1075MB 1074MB primary xfs boot
2 1075MB 21.5GB 20.4GB primary lvm
磁盘分区:gdisk/fdisk
MBR 分区表使用fdisk,GPT分区表使用gdisk分区
gdisk
[[email protected] ~]# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************
Warning! Secondary partition table overlaps the last partition by
33 blocks!
You will need to delete this partition or resize it in another utility.
Command (? for help): ? # 使用?查看所有操作
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
先通过lsblk或blkid先找到磁盘,再用
parted /dev/sda print
来找出内部的分区类型,之后再用gdisk和fdisk来操作系统。
注:使用设备文件名不要加上数字,因为磁盘分区是针对整个磁盘设备而不是某个分区。
partprobe更新Linux内核的分区表信息
partprobe [-s]
-s:可以不用-s,那么屏幕就不会输出信息
fdisk
fdisk有时使用柱面作为分区的最小单位,与gdisk默认使用扇区不太一样。
[[email protected] ~]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
磁盘格式化(创建文件系统)
分区完毕后自然就要进行文件系统的格式化。就是【make filesystem,mkfs】这个综合命令,它回去调用正确的文件系统格式化工具软件。
XFS文件系统mkfs.xfs
我们常说的格式化其实应该称为创建文件系统(make filesystem)
mkfs.xfs [-b size] [-d parms] [-i parms] [-l parms] [-L label] [-f] [-r parms] 设备名称
单位:默认为Bytes,其他使用k、m、g、t、p
-d:
agcount=数值:设置需要几个存储群组(AG),通常与GPU有关
agsize=数值:每个AG设置为多少容量,通常agcount和agsize设置一个即可
file:格式化的设备是文件而不是设备
size=数值:data section的容量
su=数值:当有RAID时,那个stripe数值的意思,与sw搭配使用
sw=数值:当有RAID时,用于保存数据的磁盘容量(须扣除备份盘与备用盘)
sunit=数值:与su相当,单位使用的是【几个sector(512Bytes)】
swidth=数值:就是su*sw,以【几个sector】来设置
-f:如果设备内已经有文件系统,使用-f来强制格式化
-i:与inode相关:
size=数值:最小256Bytes最大2K,一般保留256足够
internal=[0|1]:log设备是否为内置,默认为1内置,如果要用外部设备,使用下面设置
logdev=device:log设备为后面接的那个设备上面的意思,需设置internal=0才可
size=数值:指定这块登录区的容量,通常最小得有512个区块,大约2M以上才行
-L:后面接这个文件系统的标头名称Label name
-r:指定realtime section:
extsize=数值:重要的extent数值,一般不需要设置,但有RAID是,最好设置与swidth的数值相同较佳,最小4k最大1G
mkfs
mkfs是一个综合命令,当我们要使用
mkfs -t xfs
,它就会跑去找mkfs.xfs相关的参数
[[email protected] ~]# mkfs [tab] [tab]
mkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.fat mkfs.minix mkfs.msdos mkfs.vfat mkfs.xfs
文件系统校验
系统发生错乱,如何恢复文件系统。
xfs_repair处理XFS文件系统
xfs_repair [-fnd] 设备名称
-f:后面的设备其实是个文件而不是实体设备
-n:单纯检查并不修改文件系统的任何数据
-d:通常用在单人维护模式下,针对根目录(/)进行检查与修复操作
文件系统的挂载与卸载
挂载前,需知:
- 单一文件系统不应该被重复挂载在不同的挂载点(目录)中
- 单一目录不应该重复挂载多个文件系统
- 要作为挂载点的目录,理论上应该都是空目录才行(挂载的目录不是空目录,那么挂载了文件系统后,原目录下的东西就会暂时的消失)。
mount
mount -[alt] 挂载点
-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
-l:淡出的输入mount会显示目录挂载的信息,加上-l可增列Label名称
-t:可以加上文件系统种类来指定欲挂载的类型,常见Linux支持类型有:xfs、ext2、ext3、ext4、reiserfs、vfat、iso9660(光盘)、nfs、cifs等
-n:在默认情况下,系统会将实际挂载的情况即时写入/etc/mtab中,以利其他程序的运行,但在某些情况下(如单人维护模式)为了避免问题会刻意不写入,此时就得使用-n
-o:后面可以接一些挂载时额外加上的参数,如账号、密码、读写权限等
async,sync:此文件系统是否使用同步写入(sync)或非同步(async)的内存机制,默认async
atime,noatime:是否修改文件的读取时间,为了性能,某些时刻可使用noatime
ro,rw:挂载文件系统成为只读(ro)或可读写(rw)
auto,noauto:语序此文件系统被以mount -a自动挂载
dev,nodev:是否允许此文件系统可建立设备文件?dev为可允许
suid,nosuid:是否允许此文件系统含有suid/sgid的文件格式
exec,noexec:是否允许此文件系统上拥有可执行二进制文件
user,nouser:是否允许此文件系统让任何使用者执行mount?一般,mount仅有root可进行
defaults:默认为:rw、suid、dev、exec、auto、nouser、and async
remount:重新挂载,这在系统出错或重新更新参数时很有用
几个重要文件:
-
:系统指定的测试挂载文件系统类型的优先级/etc/filesystems
[[email protected] ~]# cat /etc/filesystems
xfs
ext4
ext3
ext2
nodev proc
nodev devpts
iso9660
vfat
hfs
hfsplus
*
-
:Linux系统已经加载的文件系统类型/proc/filesystems
[[email protected] ~]# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev debugfs
nodev securityfs
nodev sockfs
nodev dax
nodev bpf
nodev pipefs
nodev configfs
nodev devpts
nodev hugetlbfs
nodev autofs
nodev pstore
nodev mqueue
nodev selinuxfs
xfs
nodev rpc_pipefs
nodev overlay
-
/lib/modules/$(uname -r)/kernel/fs
挂载xfs/ext4/vfat等文件系统
# 找出/dev/sda4的UUID
blkid /dev/sda4
# 用UUID来挂载文件系统到/data/xfs
mount UUID="xxx" /data/xfs
挂载CD或DVD光盘
# 使用安装Linux的Centos安装光盘挂载到data/cdrom
[[email protected] ~]# blkid
/dev/sda1: UUID="238aa351-5aa8-4cc5-afe7-c5c0399e8223" TYPE="xfs"
/dev/sda2: UUID="1Ue567-hCGb-i9NA-XiR9-HIwQ-uVKu-3nD45H" TYPE="LVM2_member"
/dev/sr0: UUID="2019-09-11-18-50-31-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" # 安装光盘
/dev/mapper/centos-root: UUID="1e73f036-8787-40bb-a1f2-34ccedacaca7" TYPE="xfs"
/dev/mapper/centos-swap: UUID="1254d0db-de7c-4944-bc25-3a40e701808c" TYPE="swap"
# 挂载,光驱一挂载之后就无法退出光盘,除非你将它卸载才能退出
[[email protected] ~]# mount /dev/sr0 /data/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
[[email protected] ~]# df /data/cdrom/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sr0 4554702 4554702 0 100% /data/cdrom
挂载vfat中文移动磁盘(USB磁盘)
mount -o codepage=950,iocharset=utf8 UUID="xxx" /data/usb
使用codepage指定中文语系代码950,
重新挂载根目录与挂载不特定目录
- 整个目录树最重要的就是根目录,所以根目录不能被卸载
- 如果你的挂载参数要改变或是根目录出现【只读】状态,如何重新挂载(可重启还原)
mount -o remount,rw,auto /
卸载umount
umount [-fn] 设备文件名或挂载点
-f:强制卸载,可用在类似网络文件系统(NFS)无法读取到的情况下
-n:不更新/etc/mtab情况下卸载
-l:立即卸载文件系统,比-f还强
# 使用设备文件名卸载
umount /dev/sda4
# 使用挂载点卸载
umount /data/cdrom
设置启动挂载
启动挂载/etc/fstab和/etc/mtab
系统挂载的一些限制:
- 根目录是必须挂载的,而且一定要先于其他挂载点(mount point)被挂载进来
- 其他挂载点必须为已建立的目录,可任意指定,但一定要遵守必需的系统目录架构原则(FHS)
- 所有挂载点在同一时间内,只能挂载一次
- 所有硬盘分区在同一时间内,只能挂载一次
- 进行卸载前,必须先将工作目录移到挂载点(及其子目录)之外
[[email protected] ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Nov 6 17:51:41 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=238aa351-5aa8-4cc5-afe7-c5c0399e8223 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
各字段的概述与信息:
【设备/UUID等】 【挂载点】 【文件系统】 【文件系统参数】 【dump】 【fsck】
- 第一栏:磁盘设备文件名/UUID/LABEL name
- 第二栏:挂载点
- 第三栏:磁盘分区的文件系统
- 第四栏:文件系统参数【详见mount -o参数】
- 第五栏:能否被dump备份命令作用
- 第六栏:是否以fsck检验扇区
如何建立大型文件(dd)
dd可以用来建立空文件
dd if=/dev/zero of=/srv/loopdev bs=1M count=512
if: input file,输入文件
of:output file,将一堆0写入后面接的文件
bs:每个block大小
count:总共有几个block
创建内存交换分区
- 分区:使用gdisk或fdisk在磁盘中划分出一个分区给系统作为内存交换分区
- 格式化:使用
格式化该分区为内存交换分区mkswap 设备文件名
- 使用:通过【
】将swap设备启动swapon 设备文件名
- 观察:通过【free】和【swapon -s】观察内存使用量