inode

Running out of inodes on a docker volume

a 夏天 提交于 2019-12-06 12:44:23
I have the following docker-compos.yml file: web: build: . ports: - "4200:4200" - "35729:35729" volumes: - ..:/code - ../home:/home/dev which maps the 2 volumes above. When I login into my VM and run df -i i see Filesystem Inodes IUsed IFree IUse% Mounted on none 1218224 509534 708690 42% / tmpfs 256337 18 256319 1% /dev shm 256337 1 256336 1% /dev/shm tmpfs 256337 11 256326 1% /sys/fs/cgroup none 1000 0 1000 0% /code none 1000 0 1000 0% /home/dev /dev/sda1 1218224 509534 708690 42% /etc/resolv.conf /dev/sda1 1218224 509534 708690 42% /etc/hostname /dev/sda1 1218224 509534 708690 42% /etc

liunx ext2

浪子不回头ぞ 提交于 2019-12-06 08:50:09
liunx 使用ext2 的文件系统的管理方式: liunx 主要使用 superblock、inode,bolck的方式去管理文件系统 inode:主要存储各个文件的所有者,以及相应的权限,文件信息 block:实际文件二进制的内容存储 superblock:记录inode的使用量,block的文件使用量,等 那ext2最简单的方式是 一个文件或者目录使用一个inode,这个inode大概有128字节。其中48个字节用来存储它保存的实际文件的block节点,保存一个block的需要4字节的大小,所以48字节可以保存12个block 一个block可以设置为的大小为1k,2K,4k大小 当我们常见一个文件或者目录的时候,使用一个inode,并且分配好block来保存文件内容,但是一个inode仅仅可以保存12个block,一个block假设最大设置为4K,那么一个文件也不过保存了 12*4 = 48k的大小 根本保存不了我们平常见到的100多m的文件,那么ext2怎么解决这个问题呢,很简单,在使用一个block来保存,另外的block地址,就跟俄罗斯套娃一样,第一层block保存第二层的block的地址,那么第二层就实际可以保存,假设一个block的大小为 1k,那么可以保存 1024 / 4 = 256个第二层block的信息,如果每一层都使用用来保存新一层的信息

深入理解linux中i节点(inode)

懵懂的女人 提交于 2019-12-06 01:37:36
对于Unix系列的操作系统,大多都有v节点。但是对于linux来说,只有通用的i节点,却没有v节点。 下面来探讨一下,linux下的i节点。 linux中,文件查找不是通过文件名称来查找的。实际上是通过i节点来实现文件的查找定位的。我们可以形象的将i节点看做是一个指针fip。当文件存储到磁盘上去的时候,文件肯定会存放到一个磁盘位置上,可以这样想象,既然文件数据是存放在磁盘上的,如果我们知道这个文件数据的地址,当我们想要读写文件的时候,我们是不是直接使用这个地址去找到文件就可以了呢? 是的,linux下,i节点其实就是可以这么认为,把i节点看作是一个指向磁盘上该文件存储区的地址。只不过这个地址我们一般是没办法直接使用的,而是通过文件名来间接使用的。事实上,i节点不仅包含了文件数据存储区的地址,还包含了很多信息,比如数据大小,等等文件信息。但是i节点是不保存文件名的。文件名是保存在一个目录项中。每一个目录项中都包含了文件名和i节点。 我们可以通过一个图来看看目录项,i节点,文件数据四者之间的关系。 从上图可以看到,目录项中包含了文件名和i节点。 同时,你会发现上图中,目录项A和目录项B的i节点指向同一个存储区,其中这个存储区存放的是printf("ha")的数据。 也就是意味着helloA.c和helloB.c的内容是一样的。 这就引出了一个硬链接和符号链接的概念 硬链接 ln -d

linux系统下文件的删除机制

让人想犯罪 __ 提交于 2019-12-06 01:34:54
很多人曾经说过,linux下的病毒没有windows多的原因在于linux使用的人不多,人们不屑于开发linux下的病毒,看到这个言论我笑了,想必很多人都有过explorer被注入的经历吧,explorer被替换然后怎么也删除不掉,或者一个system32下的一个顽固文件怎么也删除不掉,更不幸的是,它就是一个木马,此时,网上流行的一些工具就显得有用了,比如icesword,这些工具不得不动用内核驱动来靠内核的超高特权来删除那些文件,windows的注册表也是一个难缠的东西,一旦注册表被篡改,后果将不堪设想,因此注册表备份工具就显得必要,这一切的关键在于windows内核的架构,windows的启动过程非常的复杂,不仅是内核的启动,更有很多的用户空间的服务是用户所不能控制的,比如winlogon进程,在用户可以接手系统之前,很多的用户空间服务已经启动了,即便是安全模式也是这样,既然用户空间的东西可以在用户接手系统之前启动,那么如果这些是恶意程序的话,你的系统将乖乖的随黑客的心而动,恐怖吧,十分恐怖!windows的文件映射是一个十分令人又爱又恨的机制,它可以使你的重要文件在被访问期间不能被删除,当然也可以使病毒被使用期间不能被删除...这一切都是因为windows将文件的删除和文件保护以及系统安全统一在了一起,这是它微内核的架构所决定的

linux硬链接和软链接的区别

瘦欲@ 提交于 2019-12-06 00:02:00
1.命令 硬链接:ln 源文件 链接名 软链接:ln -s 源目录或者源文件 链接名 2.原理: 硬链接(hard link):A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。 软链接(soft link):A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。 3.硬链接 a.不能对目录创建硬链接,只能对文件创建硬链接 原因有几种,最重要的是:文件系统不能存在链接环(目录创建时的".."除外,这个系统可以识别出来)

硬链接与软链接(符号链接)

久未见 提交于 2019-12-05 17:25:54
我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分: 用户数据 (user data) 与元数据 ( metadata) 。 用户数据 ,即文件数据块 (data block),数据块是记录文件真实内容的地方; 元数据 则是文件的附加属性,如文件名、文件大小、创建时间、所有者、文件所在的inode等信息。 在 Linux 中,元数据中的 inode 号(inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。 硬链接 硬链接是新的目录条目,其引用系统中的现有文件。文件系统中的每一文件默认具有一个硬链接。为节省空间,可以不复制文件,而创建引用同一文件的新硬链接。新硬链接如果在与现有硬链接相同的目录中创建,则需要有不同的文件名,否则需要在不同的目录中。指向同一文件的所有硬链接具有相同的权限、连接数、用户/组所有权、时间戳以及文件内容。指向同一文件内容的硬链接需要在相同的文件系统中。 简单说,硬链接就是一个 inode 号对应多个文件。就是同一个文件使用了多个别名(上图中 hard link 就是 file 的一个别名,他们有共同的 inode) 由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性: (1)文件有相同的 inode 及 data

Linux学习笔记(二)_系统设定_磁盘

不想你离开。 提交于 2019-12-05 17:09:33
磁盘相关 lsblk 这个指令可以完整的看到,所有可用块设备信息。即使并没有挂载。 df 这个指令是根据文件系统来显示信息,可以看到使用情况 # df /dir : 就可以看到/dir 这个目录是在分区里 blkid 显示分区的UUID 号,文件系统的类型 parted 查看磁盘的分区信息,还可以看到每个扇区的大小 fdisk/gdisk 给磁盘分区 为了分区后不重启 可执行 >partprobe -s 来将分区信息写入核心 在/proc/partitions 实时记录了核心中的分区信息 。 mkfs.* mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs 磁盘格式化。 参数-b 可以设定block大小 linux最大限制为4K。 参数-i size= 设定inode的大小 对于xfs文件系统有几个个调优选项就是 “-d agcount= n su=m sw=l 这个n 写上你CPU的core数,如果有超线程 可以写上VCPU总数; m写上(如果你的磁盘是RAID) RAID的 stripe;l 写上除了备份盘外使用的磁盘数。 dumpe2fs -h 用来查看superblock的信息。 挂载 mount -t 指定类型。用mount挂载的会实时出现在/etc/mstab里,要想重启后生效

从内核文件系统看文件读写过程(转)

荒凉一梦 提交于 2019-12-05 15:31:33
系统调用 操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境,但是计算机系统的各种硬件资源是有限的,因此为了保证每一个进程都能安全的执行,处理器设有两种模式:“用户模式”与“内核模式”。一些 容易发生安全问题的操作都被限制在只有内核模式 下才可以执行,例如I/O操作,修改基址寄存器内容等。而 连接用户模式和内核模式的接口称之为系统调用 。 应用程序代码运行在用户模式下,当应用程序需要实现内核模式下的指令时,先向操作系统发送调用请求。 操作系统收到请求后,执行系统调用接口,使处理器进入内核模式 。当处理器 处理完系统调用操作后,操作系统会让处理器返回用户模式,继续执行用户代码 。 进程的虚拟地址空间可分为两部分, 内核空间和用户空间 。内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们 都处于虚拟空间中,都是对物理地址的映射 。 应用程序中 实现对文件的操作过程就是典型的系统调用过程 。 回到顶部 虚拟文件系统 一个操作系统可以支持多种底层不同的文件系统(比如NTFS, FAT, ext3, ext4),为了给内核和用户进程提供统一的文件系统视图,Linux在用户进程和底层文件系统之间加入了一个抽象层,即虚拟文件系统(Virtual File System, VFS),进程所有的文件操作都通过VFS

Reading the Superblock

假装没事ソ 提交于 2019-12-05 10:13:16
I know that in Unix (specifically, Mac OS X) the superblock stores information about the layout of data on the disk, including the disk addresses at which the inodes begin and end. I want to scan the list of inodes in my program to look for deleted files. How can I find the disk address at which the inodes begin? I have looked at the statfs command but it does not provide this information. Since you mention Mac OS X, let's assume you mean to do this for HFS+ only. The Wikipedia page provides some information about possible ways to start, for instance it says this about the on-disk layout:

Linux文件和目录的属性及权限

一笑奈何 提交于 2019-12-05 09:43:00
1.Linux中的文件 1.1 文件属性概述 Linux系统中的文件或目录的属性主要包括: 索引节点inode 文件类型 权限属性 链接数 所归属的用户和用户组 最近修改时间 等内容: 下面我们看执行 ls -lih 命令的结果(共10列): -l 长格式 -i 显示 索引节点 inode -h 以人类熟悉的方式显示文件大小 [root@oldboy oldboy]# ls -lhi total 32K 275427 -rw-r--r-- 1 root root 8 Sep 4 14:56 123.log 275423 -rw-r--r-- 1 root root 0 Sep 4 14:46 dd.tx 275576 drwxr-xr-x 3 root root 4.0K Oct 1 2019 ext 275695 -rw-r--r-- 1 root root 71 Sep 4 19:45 file.txt 275582 -rw-r--r-- 1 root root 0 Oct 1 2019 jeacen 275694 -rw-r--r-- 1 root root 101 Sep 4 18:30 nginx.conf 275583 -rw-r--r-- 1 root root 0 Oct 1 2019 oldboy 275424 -rw-r--r-- 1 root root 0