inode

Linux 系统结构详解

拟墨画扇 提交于 2019-11-30 01:56:00
Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。 1、linux内核 内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图: 系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。 2、内存管理 对任何一台计算机而言,其内存以及其它资源都是有限的。为了让有限的物理内存满足应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。Linux 将内存划分为容易处理的“内存页”(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。 不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用

恢复rm删除的文件

北慕城南 提交于 2019-11-29 20:59:42
1 # debugfs针对 ext2 # ext3grep针对 ext3 # extundelete针对 ext4 2 df -T # 首先查看磁盘分区格式 3 umount /data/ # 卸载挂载,数据丢失请首先卸载挂载,或重新挂载只读 4 ext3grep /dev/sdb1 --ls --inode 2 # 记录信息继续查找目录下文件inode信息 5 ext3grep /dev/sdb1 --ls --inode 131081 # 此处是inode 6 ext3grep /dev/sdb1 --restore-inode 49153 # 记录下inode信息开始恢复目录 来源: https://www.cnblogs.com/alog9/p/11532085.html

Linux 文件系统

余生颓废 提交于 2019-11-29 14:29:13
文件系统的作用 数据存放在硬盘中, 但是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 什么是 块?

软连接与硬链接

谁说我不能喝 提交于 2019-11-29 10:06:56
linux下的软链接类似于windows下的快捷方式。   实例:   ln -s httpd.conf confighttp   其中 httpd.conf 就是源文件,confighttp是链接文件名, 其作用是当编辑confightt,实际上是链接编辑httpd.conf。 如果要删除软链接:   rm -rf confighttp   这样只会删除confighttp 链接文件 ,而不会删除源文件httpd.conf。   相对于软连接,还有硬链接,   建立硬链接命令:   ln httpd.conf confighttp   硬 链接文件 相当于一个文件存储在两个位置,可以有效防止误删。 硬链接(hard link):文件A是文件B的硬链接,则A的目录项中的inode节点号与B的目录项中的inode节点号相同, 即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。 如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名, inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。 注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。 软链接(soft

Ubuntu18.04中磁盘故障Input/output error处理

梦想与她 提交于 2019-11-29 09:26:42
系统环境 cat /etc/os-release NAME="Ubuntu" VERSION="18.04.1 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.1 LTS" VERSION_ID="18.04" 正常的磁盘信息 lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 89.1M 1 loop /snap/core/8039 loop1 7:1 0 89.1M 1 loop /snap/core/7917 sda 8:0 0 54.6T 0 disk └─sda1 8:1 0 54.6T 0 part /data sdb 8:16 0 111.8G 0 disk ├─sdb1 8:17 0 1M 0 part └─sdb2 8:18 0 111.8G 0 part / 故障现象 正常登录故障机,在/data目录下执行命令时如:ls,scp,报如下错误: ls: cannot access xxx: Input/output error 并且查看的目录的权限位全是"?" 故障排查 针对本次的故障排查流程和步骤如下: (1)查看磁盘相关报错信息,使用 dmesg|grep sd 或 dmesg|grep error

Linux inode 详解

匆匆过客 提交于 2019-11-29 07:30:34
操作系统的文件数据除了实际内容之外,通常含有非常多的属性,例如 Linux 操作系统的文件权限与文件属性。文件系统通常会将这两部分内容分别存放在 inode 和 block 中。 inode 和 block 概述 文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区 sector ,每个扇区存储 512字节 。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块 block 。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是 4KB ,即连续八个 sector 组成一个 block 。 文件数据存储在块中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做 inode ,中文译名为 索引节点 ,也叫 i节点 。因此,一个文件必须占用一个 inode ,但至少占用一个 block 。 元信息 → inode 数据 → block inode 内容 inode 包含很多的文件元信息,但不包含文件名,例如:字节数、属主 UserID 、属组 GroupID 、读写执行权限、时间戳等。 而文件名存放在目录当中,但 Linux 系统内部不使用文件名,而是使用 inode号码 识别文件。对于系统来说文件名只是 inode号码 便于识别的别称。 stat 查看

Get last access time of the file?

馋奶兔 提交于 2019-11-29 06:57:19
I want to get when the file accessed last time, I tried following code: import os, time os.system("python test.py") print os.stat('test.py').st_atime time.sleep(60) os.system("python test.py") print os.stat('test.py').st_atime But each time the output is same as follows : 1358489344.72 1358489344.72 I was expecting a difference in output before delay and after delay. also output is same wen I run the code every time. what could be wrong? The field st_atime is changed by file accesses, for example, by execve(2), mknod(2), pipe(2), utime(2) and read(2) (of more than zero bytes). Other routines,

zz文件系统磁盘布局与I/O映射

别等时光非礼了梦想. 提交于 2019-11-29 06:48:57
http://www.sysnote.org/2015/08/06/fs-io-map/ 本文主要对文件系统的磁盘布局进行概要的梳理,并在此基础上分析文件系统I/O到块I/O的映射机制。 1.文件系统磁盘布局 首先文件系统层面来阐述文件与块设备的关系。 1.1文件描述符与inode 应用程序在访问文件时都会先打开文件,在内核中,对应每个进程,都会有一个文件描述符表表示这个进程打开的文件,但是用户程序不能直接访问内核中的文件描述符表,而只能使用文件描述符表的索引(一个整数),这些索引就被称为文件描述符。当调用open 打开一个文件或创建一个新文件时,内核分配一个文件描述符并返回给用户程序,该文件描述符表项中的指针指向新打开的文件。 文件描述表中每一项都是一个指针,指向一个用于描述打开的文件的数据块–file对象,file对象中描述了文件的打开模式,读写位置等重要信息,当进程打开一个文件时,内核就会创建一个新的file对象。需要注意的是,file对象不是专属于某个进程的,不同进程的文件描述符表中的指针可以指向相同的file对象,从而共享这个打开的文件。file对象有引用计数,记录了引用这个对象的文件描述符个数,只有当引用计数为0时,内核才销毁file对象,因此某个进程关闭文件,不影响与之共享同一个file对象的进程。 file对象中包含一个指针,指向dentry对象

os模块

时光毁灭记忆、已成空白 提交于 2019-11-29 06:42:35
常用的操作(转载Eva_J) os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息 os.system("bash command") 运行shell命令,直接显示 os.popen("bash command).read() 运行shell命令,获取执行结果 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.path os.path.abspath(path) 返回path规范化的绝对路径

mmap与普通文件读写

时间秒杀一切 提交于 2019-11-29 06:18:45
常规文件系统操作(调用read/fread等类函数)中,函数的调用过程: 1、进程发起读文件请求。 2、内核通过查找进程文件符表,定位到内核已打开文件集上的文件信息,从而找到此文件的inode。 3、inode在address_space上查找要请求的文件页是否已经缓存在页缓存中。如果存在,则直接返回这片文件页的内容。 4、如果不存在,则通过inode定位到文件磁盘地址,将数据从磁盘复制到页缓存。之后再次发起读页面过程,进而将页缓存中的数据发给用户进程。 总结来说,常规文件操作为了提高读写效率和保护磁盘,使用了页缓存机制。这样造成读文件时需要先将文件页从磁盘拷贝到页缓存中,由于页缓存处在内核空间,不能被用户进程直接寻址,所以还需要将页缓存中数据页再次拷贝到内存对应的用户空间中。这样,通过了两次数据拷贝过程,才能完成进程对文件内容的获取任务。写操作也是一样,待写入的buffer在内核空间不能直接访问,必须要先拷贝至内核空间对应的主存,再写回磁盘中(延迟写回),也是需要两次数据拷贝。 而使用mmap操作文件中,创建新的虚拟内存区域和建立文件磁盘地址和虚拟内存区域映射这两步,没有任何文件拷贝操作。而之后访问数据时发现内存中并无数据而发起的缺页异常过程,可以通过已经建立好的映射关系,只使用一次数据拷贝,就从磁盘中将数据传入内存的用户空间中,供进程使用。 总而言之