文件系统

文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;
即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统

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

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

各种文件系统:
    https://en.wikipedia.org/wiki/Comparison_of_file_systems

文件系统类型

Linux文件系统:
    ext2(Extended file system):适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分区
    ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复。它通常被用作通用的文件系统
    ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
    xfs:SGI,支持最大8EB的文件系统
    btrfs(Oracle), reiserfs, jfs(AIX), swap
光盘:iso9660
Windows:FAT32, NTFS,exFAT
Unix:FFS(fast), UFS(unix), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统:fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统 (裸设备)

文件系统分类

根据其是否支持"journal"功能:
    日志型文件系统: ext3, ext4, xfs, ...
    非日志型文件系统: ext2, vfat

文件系统的组成部分:
    内核中的模块:ext4, xfs, vfat
    用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
    lsmod 
        查看系统内存中加载的各种模块(文件系统模块、硬件设备的驱动模块)
    locate xfs.ko
        查看驱动模块

Linux的虚拟文件系统:VFS
    用户通过系统虚拟的文件系统调用各种文件系统
查看支持的文件系统:cat /proc/filesystems

    centos6没有提供xfs文件系统的用户管理工具,需要自己安装
    查询命令地址
        which xfs_info
    查询安装包
        rpm -qf `which xfs_info`
    yum安装xfs
        yum install -y xfsprogs

linux常⽤的⽂件系统有哪些区别?

1. EXT3  
(1)最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件  
(2)Ext3目前只支持32000个子目录  
(3)Ext3文件系统使用32位空间记录块数量和i-节点数量 
(4)当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块  

2. EXT4  
EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本。  
(1)Ext4的文件系统容量达到1EB,而文件容量则达到16TB  
(2)理论上支持无限数量的子目录  
(3)Ext4文件系统使用64位空间记录块数量和i-节点数量  
(4)Ext4的多块分配器支持一次调用分配多个数据块  

3. XFS  
(1)根据所记录的日志在很短的时间内迅速恢复磁盘文件内容  
(2)采用优化算法,日志记录对整体文件操作影响非常小  
(3) 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间  
(4)能以接近裸设备I/O的性能存储数据 

创建文件系统

mkfs命令:
(1) mkfs.FS_TYPE /dev/DEVICE
        ext4
        xfs
        btrfs
        vfat
    例:mkfs.ext4 /dev/sda2 

(2) mkfs -t FS_TYPE /dev/DEVICE (不常用)
         -L 'LABEL' 设定卷标,加标签
        例:mkfs.ext4 -L /data/mysql /dev/sdb1

(3)blkid 查看文件系统详情

例:

mkfs.ext4 /dev/sdb1
    其中 journal (16384 blocks) 表示创建了16384个块来存放日志
    创建文件系统会预留5%给root
lsblk -f 查看文件系统详细信息

mkfs.xfs /dev/sdb1
创建完成提示信息主要分成三大类:
数据区:元数据(存放节点编号等等)、数据(存放真正数据)
        日志
        实时运行区:用来临时存放数据
                    创建文件会暂时放在realtime,确认保存再放到数据区(data)

创建ext文件系统

mke2fs:ext系列文件系统专用管理工具
    -t {ext2|ext3|ext4} 指定文件系统类型
    -b {1024|2048|4096} 指定块大小
    -L ‘LABEL’ 设置卷标
    -j 相当于 -t ext3
        mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
    -i # 为数据空间中每多少个字节创建一个inode;不应该小于block大小
    -N # 指定分区中创建多少个inode
    -I 一个inode记录占用的磁盘空间大小,128---4096
    -m # 默认5%,为管理人员预留空间占总空间的百分比  mke2fs.ext4 -m 0.1 /dev/sdb1
    -O FEATURE[,...] 启用指定特性
    -O ^FEATURE 关闭指定特性
mke2fs默认创建ext2文件系统

彻底清理文件系统:
    dd if=/dev/zero of=/dev/sdb bs=1  count=64 seek=446
清理sdb1的元数据:
    dd if=/dev/zero of=/dev/sdb bs=1 count=16 seek=446

swap无法清理元数据
被挂载的分区也无法清除元数据

文件系统标签

指向设备的另一种方法
与设备无关

blkid:块设备属性信息查看
blkid [OPTION]... [DEVICE]
    -U UUID  根据指定的UUID来查找对应的设备
    -L LABEL 根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL
    e2label DEVICE [LABEL]

findfs :查找分区
    findfs [options] LABEL=<label>
    findfs [options] UUID=<uuid>
tune2fs
tune2fs:重新设定ext系列文件系统可调整参数的值
    -l 查看指定文件系统超级块信息;super block
    -L 'LABEL’ 修改卷标
    -m # 修预留给管理员的空间百分比  
    -j 将ext2升级为ext3
    -O 文件系统属性启用或禁用, –O ^has_journal
    -o 调整文件系统的默认挂载选项,–o ^acl
    -U UUID 修改UUID号

dumpe2fs:显示ext文件系统信息,将磁盘块分组管理
    -h:查看超级块信息,不显示分组信息
    例:dumpe2fs /dev/sdb1

xfs_info:显示已挂载的 xfs 文件系统信息
    xfs_info mountpoint
fdisk重定向创建分区,将交互式变为非交互式
 1.echo -e "n\n19822\n+1G\nw\n" |fdisk /dev/sda
 2.
fdisk /dev/sda <<EOF
> n
> 19954
> +2G
>w 
>EOF
centos6系统中,如果是自己手工创建的ext文件系统分区,没有acl
tune2fs -o acl /dev/sdb1 添加acl  
centos7中,ext、xfs文件系统都有acl

例:centos6给文件系统acl
1.挂载sda7
mkdir /mut/sda7;mount /dev/sda7 /mut/sda7
2.df 查看列表
3.创建txt文件,赋予acl权限
seracl -m u:wang:rwx /mnt/sda7/f1.txt
报错操作不支持
4.取消挂载
umount /mnt/sda7
5.赋予文件系统acl
tune2fs -o acl /dev/sda7 添加acl 
6.挂载分区
mount /dev/sda7 /mnt/sda7
7.再次给txt文件设置acl,即可设置
seracl -m u:wang:rwx /mnt/sda7/f1.txt

文件系统检测和修复

文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下执行下面命令修复

fsck: File System Check
    fsck.FS_TYPE
    fsck -t FS_TYPE
        注意:FS_TYPE 一定要与分区上已经文件类型相同
    -a 自动修复
    -r 交互式修复错误

\e2fsck:ext系列文件专用的检测修复工具
    -y  自动回答为yes
    -f 强制修复
    -p 自动进行安全的修复文件系统问题

xfs_repair:xfs文件系统专用检测修复工具
    -f 修复文件,而设备
    -n 只检查
    -d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot
例:
[root@cenos7 ~]#df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        47G  4.5G   43G  10% /
devtmpfs        895M     0  895M   0% /dev
tmpfs           910M     0  910M   0% /dev/shm
tmpfs           910M   11M  900M   2% /run
tmpfs           910M     0  910M   0% /sys/fs/cgroup
/dev/sda1      1014M  174M  841M  18% /boot
/dev/sda5        19G  1.2G   18G   7% /data
tmpfs           182M     0  182M   0% /run/user/0
tmpfs           182M   32K  182M   1% /run/user/1000
/dev/sr0        4.3G  4.3G     0 100% /run/media/adong/CentOS 7 x86_64
/dev/sdb1       2.0G   33M  2.0G   2% /mut/sdb1

破坏数据:
dd if=/dev/zero of=/dev/sdb1 bs=1M count=6

取消挂载  
umount /mut/sdb1

修复数据 
fsck /dev/sdb1 -y 

重新挂载
mount /dev/sdb1

挂载mount

挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
卸载:为解除此关联关系的过程
把设备关联挂载点:mount Point
    mount
卸载时:可使用设备,也可以使用挂载点
    umount 设备名|挂载点
挂载点下原有文件在挂载完成后会被临时隐藏
挂载点目录一般为空

用mount命令挂载文件系统

挂载方法:mount DEVICE MOUNT_POINT
mount:
    /etc/mtab显示当前已挂载的所有设备
    只要更新挂载关系,配置文件就会自动修改

mount [-fnrsvw] [-t vfstype] [-o options] device dir
    device:指明要挂载的设备;
        (1) 设备文件:例如/dev/sda5
        (2) 卷标:-L 'LABEL', 例如 -L 'MYDATA'
        (3) UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
        (4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
    dir:挂载点
        事先存在,建议使用空目录
        进程正在使用中的设备无法被卸载

mount常用命令选项

-t vsftype      指定要挂载的设备上的文件系统类型
-r              readonly,只读挂载
-w              read and write, 读写挂载
-n              不更新/etc/mtab,mount不可见
-a              自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L 'LABEL'      以卷标指定挂载设备
-U 'UUID'       以UUID指定要挂载的设备
-B, --bind      绑定目录到另一个目录上

查看内核追踪到的已挂载的所有设备
    cat /proc/mounts

-o options:(挂载文件系统的选项),多个选项使用逗号分隔
    async 异步模式      sync 同步模式,内存更改时,同时写磁盘
    atime/noatime       包含目录和文件
    diratime/nodiratime 目录的访问时间戳
    auto/noauto         是否支持自动挂载,是否支持-a选项
    exec/noexec         是否支持将文件系统上运行应用程序
    dev/nodev           是否支持在此文件系统上使用设备文件
    suid/nosuid         是否支持suid和sgid权限
    remount             重新挂载
    ro 只读             rw 读写
    user/nouser         是否允许普通用户挂载此设备,/etc/fstab使用
    acl                 启用此文件系统上的acl功能
    loop                使用loop设备
    defaults            相当于rw, suid, dev, exec, auto, nouser, async  

例:mount -o rw,remount /mnt/sdb1
将/mnt/sdb1设为读写,重新挂载

mount -o acl /mnt/sdb1
给/mnt/sdb1添加acl
mount查看
mount添加的acl,如果不写进配置文件,重启就会丢失,临时性行为
/etc/mtab 会随着mount实时同步,自动更新

centos7  
/etc/mtab -> /proc/self/mounts mtab是软链接 (内存数据)

敲命令,挂载设备名、卷标、UUID都可以,
写脚本,尽量保证稳定性,使用卷标

挂载逻辑:
1.在一个挂载点,同一时间只能挂一个设备,不允许挂多个,否则后面的会把之前的给顶掉
2.一个设备可以挂载多个文件夹(可以有多个挂载点)
3.当挂载点的文件夹应该是一个干净的空文件夹

文件挂载

centos6系统禁止将文件挂载到目录中,系统会给文件映射/dev/loop0设备
losetup -a 可以查看对应关系
例:
1创建一个大文件
    dd if=/dev/zero of=/data/bigfile bs=1M count=10 
2给bigfile创建一个文件系统
    mkfs.ext4 /data/bigfile
3查看bigfile的系统信息
    blkid /data/bigfile
    /data/bigfile: UUID="6a176a88-5eb9-4a25-8a39-0249aceedb13" TYPE="ext4" 
4.创建文件夹,挂载文件
    mkdir /mnt/file
    mount /data/bigfile /mnt/file
5.创建文本
    echo abc >> /mut/file/f1.txt
6.losetup -a 可以查看对应关系
7.hexdump -C /data/big -v |less 
  查找二进制
centos6 添加loop设备
losetup -a 
ll /dev/loop*
mknod /dev/loop8 b 7 8 
ll /dev/loop*

在内核中添加loop数量
vim /boot/grub/grub.conf
max loop=100 
reboot

目录挂载

将文件夹挂载到文件夹
mkdir /mnt/boot
mount /boot /mnt/boot -B
这样/boot 和 /mnt/boot 看到的目录内容相同
mount 可以看到挂载关系 
(centos7不支持)
mount -B -n /etc /mnt/etc
/etc/mtab 不在更新 起到隐藏挂载的功能
cat /proc/mounts 可以看到所有挂载关系

卸载命令

查看挂载情况
    findmnt MOUNT_POINT|device
例:findmnt /boot
TARGET SOURCE    FSTYPE OPTIONS
/boot  /dev/sda1 xfs    rw,relatime,attr2,inode64,noquota

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

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

卸载
    umount DEVICE
    umount MOUNT_POINT

挂载点和/etc/fstab

配置文件系统体系
被mount、fsck和其它程序使用
系统重启时保留文件系统体系
可以在设备栏使用文件系统卷标
使用mount -a 命令挂载/etc/fstab中的所有文件系统

文件挂载配置文件

/etc/fstab每行定义一个要挂载的文件系统
1、要挂载的设备或伪文件系统
    设备文件
    LABEL:LABEL=""
    UUID:UUID=""
    伪文件系统名称:proc, sysfs
2、挂载点
3、文件系统类型:ext4,xfs,iso9660,nfs,none
4、挂载选项:defaults ,acl,bind
5、转储频率:0:不做备份    1:每天转储     2:每隔一天转储
6、fsck检查的文件系统的顺序:允许的数字是0 1 2
    0:不自检
    1:首先自检;一般只有rootfs才用
    2:非rootfs使用

例:将/mnt/sda1写进配置文件
vim /etc/fstab
UUID=a6867ce0-a5a2-4c35-b6f9-215dcab5a097   /mnt/sda1   ext4  ro,acl   0  0 
保存退出,自动挂载
mount -a 

lost+found

lost+found 类似于收容所
lost+found是ext文件系统自带的默认文件夹
当文件系统出现异常,某些文件可能会找不到在哪个目录里,系统会自动归入到lost+found里

centos6修复系统故障

当挂载的分区在/etc/fstab中选择自检
如果分区出现故障,重启将无法进入系统
这时需要进入故障修复
重新挂载/分区并给它rw. mount -o rw,remount /dev/sda1
修改/etc/fstab,将出故障的分区注释掉,或者将第六项文件系统自检改为0,不自检即可进去系统,进行修复
保存退出
进入系统之后,根据文件系统类型进行修复分区 fsck /dev/sdb1

文件挂载写入/etc/fstab

因为UUID只有针对文件系统才知道谁用的UUID
文件的UUID无法识别,所以只能写入文件名进行挂载
mount /data/bigfile /mnt/bigfile
写入配置文件
/data/bigfile  /mnt/bigfile  ext4  loop 0 0
保存退出
mount -a 
即可生效

目录挂载写入/etc/fstab格式

/etc  /mnt/etc   none  bind  0 0 

光盘挂载写入/etc/fstab格式

/dev/cdrom  /mnt/derom  iso9660 defaults  0 0

处理交换文件和分区

swap交换分区是系统RAM的补充,Swap 分区支持虚拟内存。
当没有足够的 RAM 保存系统处理的数据时会将数据写入 swap 分区

当系统缺乏 swap 空间时,内核会因 RAM 内存耗尽而终止进程。
配置过多 swap 空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖内存泄露

挂载交换分区

基本设置包括:
    •创建交换分区或者文件
    •使用mkswap写入特殊签名
    •在/etc/fstab文件中添加适当的条目
    •使用swapon -a 激活交换空间
启用:swapon
    swapon [OPTION]... [DEVICE]
    -a:激活所有的交换分区
    -p PRIORITY:指定优先级
    -s 显示交换区的使用状况
    /etc/fstab 在第4列中:pri=value
禁用:swapoff [OPTION]... [DEVICE]

当系统swap不足时需要添加一块硬盘分配swap

mkfswap /dev/sdb2
将swap挂载写进/etc/fstab 
UUID=...   swap  swap defaults 0 0 
(mount -a 针对swap无效)
swapon -s 查看交换区的使用状况
swapon -a 即可生效

SWAP的优先级

可以指定swap分区0到32767的优先级,值越大优先级越高
如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一

先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
优化性能:分布存放,高性能磁盘存放

在/etc/fstab中 添加pri=10 设置优先级
swapoff /dev/sdb1 
swapon /dev/sdb1
swapon -a 
重新挂载swap,优先级生效

删除swap
1. swapoff /dev/sdb1 先禁用swap
正在使用中的swap无法被禁用
2.删除/etc/fstab中的swap配置
3.清除分区元数据
dd if=/dev/zero of=/dev/sdb bs=1 count=16 seek=446
4.同步数据
partx -d --nr 1 /dev/sdb
fuser -v /mnt/sdb1
查看谁正在使用分区
fuser -km /mnt/sda4
可以将这个文件夹上正在使用的进程全部关掉
(强行关闭某个挂载点)

mount /dev/sda4 /mut/sda4
findmnt /mnt/sda4
echo $?
通过返回值,检查是否为挂载点

移动介质

挂载意味着使外来的文件系统看起来如同是主目录树的一部分
访问前,介质必须被挂载
摘除时,介质必须被卸载
按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)
挂载点通常在/media 或/mnt下

使用光盘

在图形环境下自动启动挂载/run/media/<user>/<label>
否则就必须被手工挂载
    mount /dev/cdrom /mnt/
操作光盘:
    eject 弹出光盘
    eject -t 弹入光盘
创建ISO文件
    cp /dev/cdrom /root/centos.iso
    mkisofs -r -o /root/etc.iso /etc
    ISO文件只读,无法写入
刻录光盘
    wodim –v –eject centos.iso

挂载USB介质

查看USB设备是否识别
    •lsusb
被内核探测为SCSI设备
    •/dev/sdaX、/dev/sdbX或类似的设备文件
在图形环境中自动挂载
    •图标在[计算机]窗口中创建
    •挂载在/run/media/<user>/<label>
手动挂载
    •mount /dev/sdb1 /mnt

常见工具

文件系统空间占用等信息的查看工具

df   用于显示磁盘分区上的可使用的磁盘空间
    -H 以10为单位
    -T 文件系统类型
    -h human-readable
    -i inodes instead of blocks
    -P 以Posix兼容的格式输出

查看某目录总体空间占用状态
du命令也是查看使用空间的,但是与df命令不同的是Linux,du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的
du 
    -h human-readable
    -s summary
    --max-depth=# 指定最大目录层级

工具dd

dd 命令:convert and copy a file
用法:
    dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#
    if=file     从所命名文件读取而不是从标准输入
    of=file     写到所命名的文件而不是到标准输出
    ibs=size    一次读size个byte
    obs=size    一次写size个byte
    bs=size     block size, 指定块大小(既是是ibs也是obs)
    cbs=size    一次转化size个byte
    skip=blocks 从开头忽略blocks个ibs大小的块
    seek=blocks 从开头忽略blocks个obs大小的块
    count=n     复制n个bs
    conv=conversion[,conversion...] 用指定的参数转换文件

    转换参数:
    ascii   转换 EBCDIC 为 ASCII
    ebcdic  转换 ASCII 为 EBCDIC
    lcase   把大写字符转换为小写字符
    ucase   把小写字符转换为大写字符
    nocreat 不创建输出文件
    noerror 出错时不停止
    notrunc 不截短输出文件
    sync    把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
    fdatasync 写完成前,物理写入输出文件

工具dd

备份MBR
    dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破坏MBR中的bootloader
    dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,实现如下
    dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
备份:
    dd if=/dev/sdx of=/dev/sdy
    将本地的/dev/sdx整盘备份到/dev/sdy
    dd if=/dev/sdx of=/path/to/image
    将/dev/sdx全盘数据备份到指定路径的image文件
    dd if=/dev/sdx | gzip >/path/to/image.gz
    备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
恢复:
    dd if=/path/to/image of=/dev/sdx
    将备份文件恢复到指定盘
    gzip -dc /path/to/image.gz | dd of=/dev/sdx
    将压缩的备份文件恢复到指定盘
拷贝内存资料到硬盘
    dd if=/dev/mem of=/root/mem.bin bs=1024
    将内存里的数据拷贝到root目录下的mem.bin文件
从光盘拷贝iso镜像
    dd if=/dev/cdrom of=/root/cd.iso
    拷贝光盘数据到root文件夹下,并保存为cd.iso文件
销毁磁盘数据
    dd if=/dev/urandom of=/dev/sda1
    利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值