linux+底层+磁盘读写,Linux 文件系统

文件系统的作用

020a6e5268a005851f15326647c8a2c7.png

数据存放在硬盘中, 但是linux不会让用户直接针对磁盘进行操作,这太底层了,对用户说,想存储个文件还得去学学硬盘的构成??? linux推出文件系统作为用户和底层针对磁盘读写之间的缓冲,

文件系统是一种结构, 用来组织管理文件, 比如磁盘的可用信息, 已占用和剩下的空间

常见的文件系统

名称

描述

ext2

Linux基本文件系统

ext3

ext2的增强版本

ext4

ext文件系统的第四个版本,centos6常用

xfs

centos7使用

swap

交换文件系统

nfs

网络文件系统,适合Linux或Unix机器间共享

smbfs

适合Linux或Unix和windows机器间共享

vfat

windows早期文件系统

ntfs

windows默认文件系统,功能非常强大

so9660

CD光盘的只读文件系统

GFS

google专用存储海量搜索数据而设计的专用文件系统

reiserfs

早期linux使用的日志功能的文件系统

VFS(虚拟文件系统)

Linux支持多文件系统

Linux内核是采用 vfs 虚拟文件系统,通过这个中间层对各类文件系统提供了完美的支持,对于用户来说,这些文件系统几乎是透明的,用户不再需要关系底层的文件系统的具体实现

VFS 基本结构

super block

dentry

inode

data

什么是 块?

若干个物理相邻的扇区成为一个块, 文件系统每次读取的数据都是按照快为单位的,每次读取一个块 ,这就引发了一个问题, 块划分的越小,空间的利用率就越高,但是读写的性能就降低, 块划分的越大,可能就会出现空间浪费严重的情况,但是读写性能好

一般默认每一块大小 4k

Super block 超级块

超级块是文件系统中存放的第一个块,如果他被破坏了,文件系统就完蛋了, 因为它存储了文件系统的整体信息, 包括inode/block,以及文件系统的格式

Inode 索引节点

索引节点保存的就是文件的元数据, 比如文件大小,文件所有者,文件属性,权限,文件读取,修改的时间戳等, 与此同时,它还记录了文件的数据所在的block号码和文件类型

文件数据 = 元数据+数据本身

一般inode的数量在格式化时就已经确定了,一般的都是2kb大小, 当我们创建一个目录, 这个目录下能存储的文件数=inode数, 并且一般是使用不完的

inode号是唯一的,表示不同的文件,Linux内核访问文件也是通过inode号来实现的, 所谓的文件名,其实就是inode的别名,作用就是方便给用户看

linux如何找到指定的文件?

linux系统根据文件名找到这个文件的inode号,拿着这个inode号去 inode table 中查找pointer指针,找到指定的blocks数据块

a83ea5201e87434be00c659d73d41843.png

dentry 目录项

目录项是描述文件的逻辑属性,只存在内存中,有了它可以提高查询的性能,不管是目录和文件,他们都属于dentry目录项所有的目录项在一起组成了一颗庞大的目录树

目录也是文件,也存在自己的inode, 打开目录 = 打开目录文件

例: 用户查询 /opt/data/a.txt

其中的 / opt/ data/ a.txt 都是目录项, VFS 会从/开始的inode开始,层层找到a.txt 的inode

链接文件

硬链接文件

不同的文件名,拥有相同的inode,实际上就是给inode取了多个别名,但是对应内核来说, 他俩其实就是一个文件

ln [原文件] [目标文件]

ln a.txt a.hard

101226430 -rw-r--r--. 2 root root 0 Sep 5 01:35 a.hard

101159754 lrwxrwxrwx. 1 root root 5 Sep 5 02:33 a.soft -> a.txt

101226430 -rw-r--r--. 2 root root 0 Sep 5 01:35 a.txt

软连接文件

相当于window里面的快捷方式,一方存储的是另一方的inode信息

软链接的文件有自己的inode,里面存放源数据的路径

软连接是可以跨文件系统的

查看当前文件系统挂载磁盘的情况

527deabea8b29c6ea0114bd5c8bc924c.png

df

格式: df [可选项] [设备名]

-a: 列出全部文件系统

-i: 显示文件系统的inode信息

-h: 显示单位(K M)

-T: 列出文件系统的类型

查看系统上block块信息, 上图的右半部分

[root@localhost tmp]# df

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/mapper/VolGroup00-LogVol00 39269648 2867700 36401948 8% /

devtmpfs 930152 0 930152 0% /dev

tmpfs 942028 0 942028 0% /dev/shm

tmpfs 942028 16896 925132 2% /run

tmpfs 942028 0 942028 0% /sys/fs/cgroup

/dev/sda2 1038336 90448 947888 9% /boot

tmpfs 188408 0 188408 0% /run/user/0

df -i 看到的是左边的使用情况

[root@localhost tmp]# df -i

Filesystem Inodes IUsed IFree IUse% Mounted on

/dev/mapper/VolGroup00-LogVol00 19644416 66185 19578231 1% /

devtmpfs 232538 337 232201 1% /dev

tmpfs 235507 1 235506 1% /dev/shm

tmpfs 235507 442 235065 1% /run

tmpfs 235507 16 235491 1% /sys/fs/cgroup

/dev/sda2 524288 328 523960 1% /boot

tmpfs 235507 1 235506 1% /run/user/0

mount

能看全部内容

[root@localhost tmp]# mount

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)

proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930152k,nr_inodes=232538,mode=755)

securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)

tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)

.....

修复文件系统

出现非正常开关机,突然断电,设备的读写失误导致了文件系统中supper-block被破坏了,需要修复

命令: fsck (file system check)

格式: fsck [可选项-t] [文件系统类型] [分区设备]

-y: 自动输入yes

例:

对/dev/sdb1分区进行修复

fsck -yt ext3 /dev/sdb1

卸载文件系统

格式:

umount 存储设备位置

umount 挂载点目录

可能的无法卸载的原因:

设置正在被使用

提示“... device is busy”

退出到这个文件系统外部去,重试卸载

通过 fuser 命令找到那个进程在使用这个文件系统, kill掉它

假设无法卸载的设备为/dev/sdb1

1)运行下面命令看一下哪个用户哪个进程占用着此设备

fuser -m -v /dev/sdb1

2)运行下面命令杀掉占用此设备的进程

fuser -m -v -k /dev/sdb1

或者fuser -m -v -k -i /dev/sdb1(每杀掉一下进程会让你确认)

3)再umount

配置开机自动挂载的文件系统

/etc/fstab 配置文件

[root@localhost tmp]# cat /etc/fstab

#

# /etc/fstab

# Created by anaconda on Thu Apr 6 12:25:22 2017

#

# 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/VolGroup00-LogVol00 / xfs defaults 0 0

UUID=7a0b4526-ffc0-4a51-9a43-d701c30d7c4f /boot xfs defaults 0 0

/dev/mapper/VolGroup00-LogVol01 swap swap defaults 0 0

[root@localhost tmp]#

例:

将/dev/sdb1分区挂载到/mailbox目录

[root@localhost ~]# vi /etc/fstab

/dev/sdb1 /mailbox ext3 default 0 0

其他文件系统的命令

du命令

统计(文件系统级别)的目录及文件的空间占用情况

格式: du [选项] [目录/文件名]

-a: 统计时包含全部文件

-h: 用人类可读的方式显示结果(带单位)

-s: 只统计每个参数占用空间大小

例:统计/tmp 目录下的容量

[root@localhost tmp]# du -sh /tmp

48K /tmp

查看目录的inode信息

命令: stat

格式: stat [选项] 文件名

-f:显示文件所在文件系统的信息

[root@localhost tmp]# stat /tmp

File: ‘/tmp’

Size: 4096 Blocks: 8 IO Block: 4096 directory

Device: fd00h/64768d Inode: 100663365 Links: 11

Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)

Context: system_u:object_r:tmp_t:s0

# 访问时间,数据每次被阅读后更新

Access: 2019-09-05 07:18:54.331593449 +0000

# 数据的修改时间

Modify: 2019-09-05 07:50:41.397713275 +0000

# 文件的inode节点被改变时更新

Change: 2019-09-05 07:50:41.397713275 +0000

Birth: -

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[Linux 文件系统]http://www.zyiz.net/tech/detail-91079.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值