Linux磁盘与文件系统管理

Linux磁盘与文件系统管理

1. 文件系统

1. 1.系统特性

分区完成后格式化的目的:将文件系统格式变成操作系统能够利用的格式

linux文件系统将文件的权限、属性放入inode中,实际数据放入数据区块中,超级区块记录整个文件系统的整体信息

超级区块:记录文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量,以及文件系统的格式与相关信息等

inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的区块号码

数据区块:实际记录文件的内容,若文件太大,则会占用多个区块

文件属性和权限记录到inode中,假设数据存放位置未2、7、13、15,操作系统根据排列顺序,一口气读取所有区块内容,这种读取方式被称为索引式文件系统

U盘文件系统的格式一般是FAT,没有inode存在,无法将区块在开始就读取出来,每个区块号码都记录在前一个区块中,如果文件存储位置太过分散,则需要读取几轮才能读取完整个文件的内容
需要碎片整理的原因是文件写入的区块太过于离散,此时文件读取的性能很差,碎片整理就是将同一文件所属的区块集合起来

1. 2.linux中ext2文件系统

ext2文件系统从一开始将inode和数据区块划分好,除非重新格式化,否则inode与数据库固定好后就不再改变

ext2文件系统的区块大小有1k、2k、4k

区块限制:

  • 大小原则上不能修改(可以格式化)
  • 每个区块最多存放一个文件的数据;
  • 承上,如果文件大于区块大小,则一个文件会占用多个区块数量
  • 承上,文件小于区块,则该区块的剩余容量不能被使用(空间浪费)
1. 3.与目录树的关系
1.目录

文件系统建立一个目录使,文件系统会分配一个inode与至少一块区块给该目录,inode记录该目录的相关权限和属性,并可记录分配到的那块区块的号码

2.目录树

目录树是由根目录开始读起,因此系统通过挂载的信息可以找到挂载点的inode号买得到根目录的inode内容,并依据该inode读取根目录的区块内的文件名数据,再一层一层的往下读取到正确的文件名

1. 4.日志式文件系统

写入的数据仅有inode对照表和数据区块而已,同步更新元数据的步骤没有完成,产生元数据内容与实际数据存放区不一致。

避免文件系统不一致问题的发生,步骤为:

  • 准备:当系统要写入一个文件时,会先在日志记录区块记录某个文件准备要写入的信息
  • 实际写入:开始写入文件的权限和数据;开始更新metadata数据
  • 结束:完成数据与metadata的更新后,在日志记录区块当中完成该文件的记录
1. 5.文件系统的运行

磁盘写入与内存写入的异步处理:

1.系统加载一个文件到内存后,如果该文件没有被修改过,则在内存区段的文件数据会被设置未干净[clean]。

2.如果内存中的文件数据被更改过了,此时该内存中的数据会被设置为脏的[dirty],此时所有的操作都还在内存中执行,并没有写入到磁盘中。

3。系统会不定时的将内存中设置为[dirty]的数据写回磁盘,以保持磁盘与内存数据的一致性。也可以手动强制写入

2. 文件系统的简单操作

2.1. 硬链接和符号链接
1. 硬链接

定义:通过文件系统的inode链接来产生新的文件名,而不是产生新文件

硬链接只是在某个目录下新增一条文件名链接到某inode号码的关联记录

硬链接可以数据的安全性,确保在删除其中一个文件名时,inode和区块都还是存在的,即删除源文件还是可以打开另一个文件的

限制:

  • 不能跨文件系统
  • 不能链接目录
$ ll -i 文件名 # 查看文件具体信息
2. 符号链接(快捷方式)

定义:在建立一个独立的文件,而这个文件会让数据的读取指向他link的那个文件的档名

当来源档被删除之后,符号链接的文件会打不开

符号链接的文件都是独立的,数据内容存放在来源档的数据区块中,而连接档的大小就是文件名所占用的空间

$ ln [-sf] 来源文件 目标文件
选项与参数:
	-s:如果不加任何参数就进行连结,那就是hard link,加-s 就是符号链接
	-f:如果目标文件存在,就主动将目标文件移除在建立

3.关于目录的link数量

一个空目录至少会存在...这两个目录,所以创建一个新的目录/tmp/testing至少存在三个东西:

  • /tmp/testing
  • /tmp/testing/.
  • /tmp/testing/…

所以创建空目录时会导致上层目录的链接数增加一个

相关命令自行查询,本小节还有许多东西未写,以后用到在查

3. 磁盘的分区、格式化、检验与挂载

新增磁盘的动作:

  • 对磁盘进行分区,建立patition;
  • 对该patition进行格式化,建立系统可用的文件系统;
  • 对文件系统进行检验
  • 建立挂载点,并挂载
3.1.观察磁盘分区状态

lsblk(list block device),列出所有储存装置

$ lsblk [-dfimpt] [device]
  选项与参数:
    -d:仅列出磁盘本身,并不会列出该磁盘的分区数据
    -f:同时列出该磁盘内的文件系统名称
    -i:使用 ASCII的线段输出,不要使用复杂的编码(再某些环境下很有用)
    -m:同时输出该装置在/dev底下的权限数据(rwx的数据)
    -p:列出该装置的完整文件名!而不是仅列出最后的名字而已。
    -t:列出该磁盘装置的详细数据,包括磁盘队列机制、预读写的数据量大小等
# 不加任何参数即列出本系统下所有磁盘与磁盘内的分区信息


$ blkid #列出装置得UUID等参数

$ parted device_name print # 列出磁盘得分区表类型与分区信息 如 /dev/vda


3.2. 磁盘分区:gdisk/fdisk

分区时,应使用parted检查分区表格式,再判断使用fdisk/gdisk来分区,或直接使用parted分区

MBR分区表使用fdisk分区,GPT分区表使用gdisk分区

$ gdisk # 装置名称 如/dev/vda
# 按?查看命令,一般情况下按q可以不保留退出,别按下w即可
# 如果是选择新增分区,在Last sector处,如果不打算全部分给一个区,需要通过 +容量 得方式区控制区大小

在这里插入图片描述
最后需要将分区写入磁盘分区表
在这里插入图片描述
最后更新核心的分区表信息

$ partprobe [-s] 
参数:
	-s:屏幕显示讯息
3.3. 磁盘格式化(建置文件系统)
1. XFS 文件系统

当又xfs文件系统错乱时才需要使用这个指令

$ mkfs.xfs [-b bsize] [-d parms] [-i parms] [-L label] [-f] [-r parms] 装置名称
选项与参数:
关于单位:底下只要谈到『数值』时,没有加单位则为 bytes值,可以用k,m,g,t,p (小写)等来解释
比较特殊的是s这个单位,它指的是sector的『个数』喔!
制为Linux的4k喔!
-b:后面接的是 block容量,可由512到64k,不过最大容量限制
-d:后面接的是重要的 data section的相关参数值,主要的值有:
    agcount=数值:设定需要几个储存群组的意思(AG),通常与CPU有关
    agsize=数值:每个AG设定为多少容量的意思,通常agcount/agsize只选一个设定即可
	fil1e :指的是「格式化的装置是个文件而不是个装置』的意思!(例如虚拟磁盘)
	size=数值: data section的容量,亦即你可以不将全部的装置容量用完的意思
	su=数值 :当有 RAID时,那个stripe 数值的意思,与底下的 sw 搭配使用
	sw=数值 :当有RAID时,用于储存数据的磁盘数量(须扣除备份碟与备用碟)
sunit=数值  :与su相当,不过单位使用的是『几个sector(512bytes大小)』的意思
swidth=数值 :就是su*sw的数值,但是以『几个sector(512bytes大小)」来设定

-f:如果装置内已经有文件系统,则需要使用这个-f 来强制格式化才行!
-i:与inode有较相关的设定,主要的设定值有:
	size=数值 :最小是256bytes最大是2k,一般保留256就足够使用了!
	interna1=[O | 1]: log 装置是否为内建?预设为1内建,如果要用外部装置,使用底下设定
	logdev=device : log装置为后面接的那个装置上头的意思,需设定internal=0才可!
	size=数值 :指定这块登录区的容量,通常最小得要有512个block,大约2M以上才行!
-L:后面接这个文件系统的标头名称Label name的意思!
-r:指定realtime section的相关设定值,常见的有:
	extsize=数值:就是那个重要的 extent 数值,一般不须设定,但有RAID 时,最好设定与 swidth的数值相同较佳!最小为4K最大为1G。


# sunit=512 agcount=2 swidth=3584
$ mkf s.xfs -f -d agcount=2,sunit=512,swidth=3584 -r extsize=1792K /dev/vda4

2. EXT4 文件系统mkfs.ext4
$ mkfs.ext4 [-b size] [-L label] 装置名称
选项与参数:
-b:设定block 的大小,有1K,2K,4K的容量,
-L:后面接这个装置的标头名称。

# 
$ mkfs.ext4 /dev/vda5
3.4. 文件系统检验
1.xfs_repair 处理XFS文件系统
$ xfs_repair [-fnd] 装置名称
选项与参数:
-f:后面的装置其实是个文件而不是实体装置
-n:单纯检查并不修改文件系统的任何数据(检查而已)
-d:通常用在单人维护模式底下,针对根目录(/)进行检查与修复的动作!很危险!不要随便使用

xfs_repai可以检查/修复文件系统,修复时该文件系统不能被挂载,可以先卸载,再处理。

根目录如法被卸载,根目录出现问题时需要进入单人模式或就救援模式,然后通过其他办法解决

2.fsck.ext4 处理EXT4文件系统
$ fsck.ext4 [-pf] [-b superblock] 装置名称
选项与参数:
-p :当文件系统在修复时,若有需要回复 y的动作时,自动回复 y来继续进行修复动作。
-f:强制检查!一般来说,如果fsck没有发现任何unclean的旗标,不会主动进入细部检查的,如果您想要强制fsck 进入细部检查,就得加上-f旗标啰
-D:针对文件系统下的目录进行优化配置。
-b :后面接superblock的位置!一般来说这个选项用不到。但是如果你的superblock因故损毁时,透过这个参数即可利用文件系统内备份的 superblock来尝试救援。一般来说,superblock 备份在:lK block放在8193,2K block放在16384,4K block放在32768

无论时xfs_repair或fsck.ext4,都是用来检测与修正文件系统错误的指令,如果在正常情况下使用此指令,可能会造成对系统的危害。

执行xfs_repair或fsck.ext4时,被检查的partition务必不可挂载到系统上,即是需要在卸除的状态。

3.5. 文件系统挂载与卸除

挂载点是目录,是进入磁盘分区槽(文件系统)的入口,挂载前处理:

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)上;
  • 单一目录不应该重复挂载多个文件系统
  • 要作为挂载点的目录,理论上应该都是空目录

如果挂载的目录不是空的,挂载文件系统后,原目录下的东西就会暂时消失,等新挂载系统被卸除后,原目录的内容会在次显示。

不输入参数即是查看目录树

$ mount [option]
选项与参数:
    -a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
    -1:单纯的输入mount会显示目前挂载的信息。加上-1可增列Labe1名称!
    -t:可以加上文件系统种类来指定欲挂载的类型。常见的 Linux支持类型有: xfs,ext3,ext4,reiserfs,vfat,iso9660(光盘格			式),nfs,cifs,smbfs (后三种为网络文件系统类型)
    -n:在默认的情况下,系统会将实际挂载的情况实时写入letc/mt ab 中,以利其他程序的运作。但在某些情况下(例如单人维护模式)为了避		免问题会刻意不写入。此时就得要使用-n选项。
    -o:后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等:
        async, sync:此文件系统是否使用同步写入(sync)或异步( async)的内存机制,请参考文件系统运作方式。预设为async.
        atime,noatime:是否修订文件的读取时间(atime)。为了效能,某些时刻可使用noatime
        ro,rw:挂载文件系统成为只读( ro)或可擦写(rw)
        auto,noauto:允许此 filesystem被以mount -a自动挂载(auto)
        dev,nodev:是否允许此filesystem 上,可建立装置文件?dev为可允许
        suid,nosuid:是否允许此filesystem含有suid/sgid的文件格式?
        exec,noexec :是否允许此filesystem上拥有可执行 binary
        文件?
        user,nouser:是否允许此filesystem让任何使用者执行mount ?一般来说,mount仅有root可以进行,但下达user参数,则可让
        一般user也能够对此partition进行mount
        defaults :默认值为:rw,suid,dev,exec,auto,nouser,and async
        remount :重新挂载,这在系统出错,或重新更新参数时,很有用!

有的文件系统需要进行挂载测试

挂载xfs/ext4/vfat等文件系统

挂载CD或DVD光盘

挂载vfat中文随身碟(USB磁盘)

1.重新挂载根目录与挂载不特定目录

根目录的挂载参数需要改变,根目录出现只读状态

1.重启

2.mount -o remount,rw,auto /

2.装置文件卸除
$ umount [-fn] 装置文件或挂载点
选项与参数:
-f:强制卸除!可用在类似网络文件系统(NFS)无法读取到的情况下
-1:立刻卸除文件系统,比 -f 还强!
-n:不更新letc/mt ab 情况下卸除。

使用df或mount查看是否存在目录树

#查看磁盘信息
$ mount /home
# 查看磁盘信息
$ df -h /home
3.6. 磁盘/文件系统参数修订

修改文件西的一些相关信息,如lable name

指令

  • mknod
  • xfs_admin
  • tune2fs

具体指令用法需要用到时查阅

4 设定开机挂载

系统自动在开机时进行挂载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值