文件系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件系统相关的知识,希望对你有一定的参考价值。

磁盘没有文件系统 对其读取是以二进制读取  

      文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的 系统。具体地说,它负责为用户建立文件,存入、读出、修 改、转储文件,控制文件的存取,安全控制,日志,压缩, 加密等 对磁盘进行格式化

显示支持的文件系统: ls /lib/modules/`uname –r`/kernel/fs


根据其是否支持"journal"功能:journal 日志

 日志型文件系统: ext3, ext4, xfs, ...

非日志型文件系统: ext2, vfat

 

文件系统的组成部分:

内核中的模块:ext4, xfs, vfat

用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

 

1.创建文件系统

 

mkfs命令:

 v(1) mkfs.FS_TYPE /dev/DEVICE

                      ext4

                        xfs

                      btrfs

                       vfat

(2) mkfs -t FS_TYPE /dev/DEVICE -L 'LABEL':     指明文件类型并设定卷标

            -b {1024|2048|4096} 块大小    mkfs.xfs -b 1024 /dev/sdc  里面文件至少占1024

          块大小为磁盘扇区(512字节)  的整数倍  

 

2.创建ext文件系统

mke2fsext系列文件系统专用管理工具

-t {ext2|ext3|ext4}

 -b {1024|2048|4096}  创建后无法更改

-L 'LABEL'   卷标             一般为 挂载目录  mkdir /mnt/ss4     mount /dev/sdd1 /mnt/ss4

-j: 相当于 -t ext3

 mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

 -i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小

 -N #:指定分区中创建多少个inode

  -I 一个inode记录占用的磁盘空间大小,128---4096

 -m #: 默认5%,为管理人员预留空间占总空间的百分比

 -O FEATURE[,...]:启用指定特性

 -O ^FEATURE:关闭指定特性

 

3.ext系列文件系统参数调整   不能调整block大小

tune2fs:重新设定ext系列文件系统可调整参数的值

 

-l:查看指定文件系统超级块信息;super block

 -L 'LABEL':修改卷标

 tune2fs /dev/sdd1 -L /mnt/ss4

 -m #:修预留给管理员的空间百分比

 -j: ext2升级为ext3

 -O: 文件系统属性启用或禁用, –O ^has_journal

 -o: 调整文件系统的默认挂载选项,–o ^acl

 -U UUID: 修改UUID

 

4.文件系统标签

blkid:块设备属性信息查看

 vblkid [OPTION]... [DEVICE]

-U UUID: 根据指定的UUID来查找对应的设备

 -L LABEL:根据指定的LABEL来查找对应的设备

ve2label:管理ext系列文件系统的LABEL

e2label DEVICE [LABEL]

vfindfs :查找分区

 findfs [options] LABEL=<label>

 findfs LABEL=/mnt/ss4

 findfs [options] UUID=<uuid>

findfs UUID=9e141ad2-0d2f-4668-963e-bf2c4d01c4d2

 

[[email protected] fs]$mkfs.ext4 /dev/sdd1

[[email protected] fs]$blkid

/dev/sdd1: UUID="3e7988c1-6f1a-4fe8-b6a2-68cad8553fdc" TYPE="ext4"

[[email protected] fs]$mkfs -t ext3 /dev/sdd1

/dev/sdd1: UUID="afc398dd-2c59-4c7b-b1b4-3d42d46a85f6" SEC_TYPE="ext2" TYPE="ext3"

[[email protected] fs]$tune2fs -l /dev/sdd1

(默认特性)Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super large_file

[r[email protected] fs]$tune2fs -O ^has_journal /dev/sdd1

[[email protected] fs]$blkid

/dev/sdd1: UUID="afc398dd-2c59-4c7b-b1b4-3d42d46a85f6" TYPE="ext2"         ex3ex2多了日志功能

 

5.文件系统检测和修复

 

常发生于死机或者非正常关机之后

挂载为文件系统标记为“no clean”

v 注意:一定不要在挂载状态下修复

 vfsck: File System Check fsck.FS_TYPE fsck -t FS_TYPE

-p: 自动修复错误

 -r: 交互式修复错误 FS_TYPE一定要与分区上已经文件类型相同

 ve2fsckext系列文件专用的检测修复工具

 -y:自动回答为yes

  -f:强制修复

注:fsck 扫描文件系统时一定要在单用户模式、修复模式或把设备umount后进行。

         文件系统的修复 顶多修复的是文件系统的元数据 并不能修复其内容

 

dumpe2fs  DEVICE: 查看文件系统详细信息

块分组管理,32768块 一组

-h:查看超级块信息,不显示分组信息  

 

Primary superblock at 0主要超块0

Superblock backups stored on blocks: 备份超级块

 

[[email protected] ~]$dumpe2fs /dev/sdd1 | grep -i "superblock"

dumpe2fs 1.42.9 (28-Dec-2013)

 Primary superblock at 0, Group descriptors at 1-1  

 Backup superblock at 32768, Group descriptors at 32769-32769

 Backup superblock at 98304, Group descriptors at 98305-98305

 Backup superblock at 163840, Group descriptors at 163841-163841

 Backup superblock at 229376, Group descriptors at 229377-229377

 Backup superblock at 294912, Group descriptors at 294913-294913

[[email protected] ~]$dd if=/dev/zero of=/dev/sdd1 bs=1M count=1          破坏sdd1 主要超快0 (Reserved GDT blocks at 2-256) 256x4(块大小)=1M 全局描述符表GDT损坏

[[email protected] ~]$dumpe2fs /dev/sdd1

dumpe2fs 1.42.9 (28-Dec-2013)

dumpe2fs: Bad magic number in super-block while trying to open /dev/sdd1

Couldn't find valid filesystem superblock.

[[email protected] ~]$fsck /dev/sdd1     未挂载状态下修复

[[email protected] ~]$dumpe2fs /dev/sdd1 | grep -i "superblock"

Backup superblock at 163840, Group descriptors at 163841-163841

 

6.用mount命令挂载文件系统

挂载:额外文件系统根文件系统某现存的目录建立起关联 关系,进而使得此目录做为其它文件访问入口的行为,无文件系统无法挂载

v 挂载点下原有文件在挂载完成后会被临时隐藏

v 挂载点目录一般为空

v 卸载时:可使用设备,  也可以使用挂载点 umount 当挂载设备被访问时,不能取消该设备挂载

多个设备分区不允许同1个挂载点

1个设备分区可以多个挂载点

 

mount [-fnrsvw] [-t vfstype] [-o options] device dir

-n: 不更新/etc/mtabmount不可见     cat /proc/mounts可查看

-B, --bind: 绑定目录到另一个目录上

 

给文件创建文件系统

[[email protected] ~]#dd if=/dev/zero of=/app/cantest bs=1M count=100   文件

[[email protected] ~]mke2fs -t ext4 /app/cantest

[[email protected] ~]#blkid /app/cantest      centos6 cantest为文件    查看属性需要跟详细路径

/app/cantest: UUID="50955518-b925-4b14-b127-7b13d671ca62" TYPE="ext4"

对文件挂载目录

[[email protected] ~]#mkdir one

[[email protected] ~]#mount /app/file one

mount: /app/file is not a block device (maybe try `-o loop'?) 不是块设备不能定义block大小

[[email protected] ~]#mount -o loop /app/file one      对文件进行挂载  需要使用loop设备进行挂载  ls /dev/loop*

[[email protected] ~]#mount

/app/file on /root/one type ext4 (rw,loop=/dev/loop0)

centos6 /dev/loop*设备不够 可手动创建

[[email protected] ~]#ll /dev/loop*

brw-rw----. 1 root disk 7, 7 Aug  1 21:14 /dev/loop7

[[email protected] ~]#mknod /dev/loop8 b 7 8

[[email protected] ~]#cp /app/file{,1}

[[email protected] ~]#blkid /app/file{,1}

/app/file: UUID="add5eca5-be19-4603-bd20-ba40f28017a0" TYPE="ext4"

/app/file1: UUID="add5eca5-be19-4603-bd20-ba40f28017a0" TYPE="ext4"  复制保留文件系统特性

 

目录挂载目录

[[email protected] ~]#mount -B /etc /app

[[email protected] ~]#ls /app

abrt                     drirc             latrace.conf      pinforc                       screenrc

acpi                     enscript.cfg      latrace.d         pkcs11                        securetty

[[email protected] ~]#ls /etc

abrt                     drirc             latrace.conf      pinforc                       screenrc

acpi                     enscript.cfg      latrace.d         pkcs11                        securetty

像文件的硬链接 但实现了跨分区

 

mount常用命令选项

-o options(挂载文件系统的选项),多个选项使用逗号分开

atime/noatime:包含目录和文件  不刷新访问时间  适用于web服务器

[[email protected] ~]#mount -B -o noatime /etc one  one访问/etc文件目录 不刷新访问时间

diratime/nodiratime:目录的访问时间戳

suid/nosuid:不否支持suidsgid权限

remount:重新挂载    不用取消在挂载    mount -o remount MOUNT_POINT|device

[[email protected] ~]#mount /mnt/cdrom /mnt/sdd2

挂载后重挂载

[[email protected] ~]#umount /mnt/sdd2

[[email protected] ~]#mount -o dev /mnt/cdrom /mnt/sdd2

等同于

[[email protected] ~]#mount -o remount,dev /mnt/sdd2|mnt/cdrom

 defaults(默认挂载选项):相当于rw, suid, dev, exec, auto, nouser, async 

 

v 查看正在访问指定文件系统的进程  

lsof  查看那个进程,那个用户打开了某个文件,目录等信息。

lsof MOUNT_POINT

fuser -v MOUNT_POINT

v 终止所有在正访问指定的文件系统的进程 fuser -km MOUNT_POINT

v 取消挂载 umount DEVICE

                umount MOUNT_POINT

 

查看挂载情况

findmnt MOUNT_POINT|device 

 echo $?

 

7.挂载点和/etc/fstab

v 配置文件系统体系

     cat /etc/fstab

 v mountfsck和其它程序使用

 v 系统重启时保留文件系统体系

 v 可以在设备栏使用文件系统卷标

 v 使用mount  -a 命令挂载/etc/fstab中的所有文件系统带  defaults(默认挂载选项)立即生效  试用于一般挂载 不适合文件 目录 swap     要 使用mount -o remount /dev/sdd  重挂立即生效

     设备名、卷标 、UUID都可以描述设备    由于设备名位置可能发生变化以及卷标可能重复性 ,在设备的配置文   件中描述设备最好用UUID  文件系统的通用唯一标识符UUID

 技术分享图片

处理交换文件和分区

v 交换分区是系统RAM的补充 v不能存放数据  直接进行数据交换

 基本设置包括:

 ? 创建交换分区或者文件

 ? 使用mkswap写入特殊签名

 ? /etc/fstab文件中添加适当的条目

 ? 使用swapon -a 激活交换空间

挂载交换分区

指明优先级swapon -p PRIORITY:指定优先级 /etc/fstab:pri=value

使用文件作为交换分区

--生成文件    大小1G

[[email protected] ~]$dd if=/dev/zero of=swapfile bs=1M count=1024

1024+0 records in

1024+0 records out

1073741824 bytes (1.1 GB) copied, 29.1077 s, 36.9 MB/s

--将生成的文件格式化成交换分区:

[[email protected] ~]$mkswap swapfile

Setting up swapspace version 1, size = 1048572 KiB

no label, UUID=863bfe20-417e-4905-af91-603e2a1d48f9

--启动swapfile分区 并查看状态

[[email protected] ~]$swapon swapfile

swapon: /root/swapfile: insecure permissions 0644, 0600 suggested. 建议修改权限为0600

--重启生效写入/etc/fstab   

echo "UUID=863bfe20-417e-4905-af91-603e2a1d48f9 swap swap defaults 0 0">>/etc/fstab

 

删除交换分区文件
(1)回收交换文件
 swapoff ~/swapfile

(2 )去除/etc/fstab中的该行

(3)删除该文件

   rm ~/swapfile

                                                          

使用磁盘作为交换分区

--创建sdc3 分区作为swap分区

[[email protected] ~]$fdisk /dev/sdc

--修改为swap分区

Command (m for help): t               指定挂载选项

Partition number (1-3, default 3): 3

Hex code (type L to list all codes): 82           centos78200

技术分享图片

--格式化分区使其生效 相对于构建文件系统

[[email protected] ~]$mkswap /dev/sdc3

Setting up swapspace version 1, size = 10484732 KiB

no label, UUID=b95483f9-351d-4e26-96fc-06055a19f321

[[email protected] ~]$swapon -s

Filename                                Type                Size        Used        Priority 优先级

/dev/sda3                                      partition        1952764        57132        -1

/root/swapfile                                 file                       1048572        0            -2

/dev/sdc3                                      partition        10484732        0        -3

--在/etc/fstab下修改配置文件 并指明优先级

[[email protected] ~]swapon -p 100 /dev/sdc3

技术分享图片

--查看swap分区使用状况

[[email protected] ~]$free -m

              total        used        free      shared  buff/cache   available

Mem:           1824         575          75          16        1174        1017

Swap:         13169          55       13114

--关机交换分区

[[email protected] ~]$swapoff /dev/sdc3

swap能应物理内存的使用情况  free命令中swap使用率较高时,说明内存不足,须加内存

 

光盘挂载

 mount /dev/cdrom MOUNT_POINT  

 /dev/cdrom(挂载盘)  通用  软连接于sr0

创建ISO文件 cp /dev/cdrom /root/centos7.iso

mkisofs  -r  -o  /root/etc.iso /etc 针对etc 打包成rootetc.iso文件

设置光盘挂载

技术分享图片

mount /dev/cdrom /mnt/cdrom

技术分享图片

技术分享图片

开启自动挂载

在 7中 systemctl start autofs  没有此服务  安装 autofs包  systemctl enable autofs 开机自启

     6: service autofs start

#cd /misc/cd

技术分享图片

写入/etc/fstab配置文件

 练习:

1、创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项

mkfs.ext4 -b 2048 -m 1 -O acl  /dev/sdb1 -L TEST   -L TEST 需跟在后面

mount /dev/sdb1 /test

/dev/sdc2                                 /test                    ext4     defaults,acl           0 0  

2、写一个脚本,完成如下功能:

(1) 列出当前系统识别到的所有磁盘设备

(2) 如磁盘数量为1,则显示其空间使用信息

否则,则显示最后一个磁盘上的空间使用信息

技术分享图片

3.实现CentOS-6.9-x86_64-bin-DVD1 CentOS-6.9-x86_64-bin-DVD2 两张光盘合为一张iso镜像文件 并设置为yum

 cp centos6-DVD1

[[email protected] ~]#mkdir centos6

[[email protected] ~]#cp -r /media/CentOS_6.9_Final/* centos6

[[email protected] ~]#ls centos6

CentOS_BuildTag  isolinux                  RPM-GPG-KEY-CentOS-Debug-6

EFI              Packages                  RPM-GPG-KEY-CentOS-Security-6

EULA             RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-Testing-6

GPL              repodata                  TRANS.TBL

images           RPM-GPG-KEY-CentOS-6

挂载centos6-DVD2  dvd2dvd1Packages下文件不同

[[email protected] ~]#cp -r /media/CentOS_6.9_Final/Packages/* centos6

[[email protected] ~]#./mkdvdiso.sh centos6 /app/CentOS-6-x86_64-Everything.iso

Error: /usr/bin/implantisomd5 Not Found!

Please install isomd5sum and try again.

[[email protected] ~]#yum install isomd5sum

[[email protected] ~]#./mkdvdiso.sh centos6 /app/CentOS-6-x86_64-Everything.iso

 

 

以上是关于文件系统的主要内容,如果未能解决你的问题,请参考以下文章

Linux文件系统的文件系统

Linux里面文件系统都有哪些?

常见的文件系统都有哪些?

Android 文件系统中添加文件及添加系统属性

docker联合文件系统

深究NTFS文件系统