Linux 文件系统的操作实现

此读书笔记比较主要记录文件系统的相关操作。

磁盘与目录的容量

磁盘的整体数据是在superblock块中,但是每个个别文件的容量则在inode当中记载,常用来显示磁盘使用量的两个命令

df: 列出文件系统的整体磁盘使用量

du: 评估文件系统的磁盘使用量(常用于评估目录所占容量)

$ df [-ahikHTm] [目录或文件名]
参数:
-a: 列出所有的文件系统,包括系统特有的/proc(/proc挂载在内存中,不会占用磁盘空间)等文件系统;
-k: 以KB的容量显示各文件系统
-m: 以MB的容量显示各文件系统
-h:以人们较易阅读的GB、MB、KB等格式自行显示
-H: 以M=1000K 替换M=1024K 的进位方式
-T: 连同该分区的文件系统名称也列出(例如ext3)
-i: 不用硬盘容量,而以inode的数量显示

df主要读取的数据几乎都是针对整个文件系统,因此读取的范围只要是在super block内的信息,所以这个命令显示结果的速度非常快速。

$ du [-ahskm] 文件或者目录名称
参数:
-a 列出所有的文件与目录容量,因为默认仅统计目录的文件量而已
-h 以人们较易读的容量显示
-s 列出总量,而不列出每个个别的目录占用容量
-S 不包括子目录下的总计
-k 以KB列出容量显示
-m 以MB列出容量显示

du会直接查找文件系统的所有文件数据

连接文件: ln

在linux下的连接文件有两种:一种是类似Windows上的快捷方式,可以让你快速连接到目标文件或目录。另外一种则是通过文件系统的inode连接来产生新文件名,而不是产生新文件,这种称为硬链接(hard link)。

hard link(硬连接和实际连接)

  • 每个文件都会占用一个inode,文件的内容由inode的记录来指向。
  • 想要读取文件,必须要经过目录记录的文件名来指向到正确的inode号码才能读取。
  • 文件名与目录有关,而文件内容则与inode有关,而hard link就是在某个目录下新建一个文件名连接到某inode号码的关联记录。
vagrant@vagrant-ubuntu-trusty-64:~$ cd /tmp
vagrant@vagrant-ubuntu-trusty-64:/tmp$ touch tes
vagrant@vagrant-ubuntu-trusty-64:/tmp$ ln test test1
vagrant@vagrant-ubuntu-trusty-64:/tmp$ ll -i test test1
62273 -rw-rw-r-- 2 vagrant vagrant 0 Dec 17 12:39 test
62273 -rw-rw-r-- 2 vagrant vagrant 0 Dec 17 12:39 test1

可以看到两个文件的inode号码是一致的,他们的文件权限属性完全一样,而连接数变为了2。

硬连接最大的好处就是安全,如果你将任何一个文件名删除,其实inode与block都是存在的。此时可以通过另外一个文件名来读取到正确的文件数据,不论你使用哪个文件名来编辑,最终的结果都会写到相同的inode与block中,因此均能进行数据的修改。

一般来说,使用hard link设置连接文件时,磁盘的空间和inode的数目都不会改变,hard link只是在某个目录下的block多写一个关联数据而已,既不会增加inode也不会耗用block数量(除非当你在block增加多一个关联数据时刚好磁盘满了,就可能需要增加多一个block来记录文件名关联性,而导致磁盘空间的变化)。

硬连接的限制:

  • 不能跨文件系统
  • 不能连接到目录,因为如果使用hard link连接到目录,连接的数据需要连同被连接目录下面的所有数据都建立连接,会造成环境相当大的复杂度,因此对于目录暂时不支持

symbolic link(符号连接,也即快捷方式)

symbolic link就是创建一个独立的文件,而这个文件会让数据的读取指向它链接的那个文件的文件名,由于只是利用文件作为指向的操作,所以当源文件被删除后,symbolic link的文件会找不到源文件而导致无法打开。

vagrant@vagrant-ubuntu-trusty-64:/tmp$ ln -s test test2
vagrant@vagrant-ubuntu-trusty-64:/tmp$ ll -i test test2
62273 -rw-rw-r-- 2 vagrant vagrant 0 Dec 17 12:39 test
62275 lrwxrwxrwx 1 vagrant vagrant 4 Dec 17 13:07 test2 -> test

两个文件指向不同的inode号码,连接文件的重要内容就是它会写上目标文件的文件名,因为箭头右边的文件是 4 Byte,所以连接文件的大小为 4 byte。

由symbolic link所创建的文件为一个独立的新的文件,所以会占用掉inode与block。

修改symbolic link文件时,会改动到源文件。

$ ln [-sf] 源文件 目标文件
参数:
-s: 如果不加任何参数进行连接,那就是hard link,至于-s就是symbolic link
-f: 如果目标文件存在时,主动将目标文件直接删掉再重建。

关于目录的连接数

当以hard link进行文件的连接时,文件的连接数会增加1,那当我们创建一个空的目录时,由于存在 . 与 .. 这两个目录,那么当我们创建一个空的目录/tmp/testing时,基本会有3个东西:
/tmp/testing
/tmp/testing/.
/tmp/testing/..
其中 /tmp/testing 和 /tmp/testing/. 都代表该目录,而 /tmp/testing/.. 则代表 /tmp 这个目录,所以当我们创建一个新目录,新的目录连接数为2,而上层目录的连接数则会增加1。

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

如果要在系统中新增一块硬盘时,需要做以下动作:

  1. 对磁盘进行分区,以新建可用的分区
  2. 对该分区进行格式化,以创建系统可用的文件系统。
  3. 若想要仔细一点,则可对刚才新建好的文件系统进行检验。
  4. 在linux系统上,需要创建挂载点(也即是目录),并将它挂载上来。

磁盘分区:fdisk

$ fdisk [-l] 设备名称
参数:
-l: 输出后面接的设备所有的分区内容。若仅有fdisk -f时,则系统将会把整个系统能够找到的设备的分区均列出来。

# 例如:
# 先找出磁盘文件名
vagrant@vagrant-ubuntu-trusty-64:/tmp$ df /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc1 41251136 3631948 35883276 10% /
# 输入fdisk,但不要加上数字
vagrant@vagrant-ubuntu-trusty-64:/tmp$ fdisk /dev/hdc
它会提示Command(m for help): 输入m就可以看到相关参数提示
d 代表删除一个分区
n 代表新增一个分区
p 代表在屏幕中显示分区表
q 代表不存储,离开fdisk程序
w 代表将刚才的操作写入分区表

特别注意 q 和 w,只要离开fdisk时按下q,那么所有的操作都不会生效,相反按下 w 就是操作生效的意思。

删除磁盘分区

要删除分区(例如将/dev/hdc全部分区删除)需要做下面几步:

  1. fdisk /dev/hdc: 先进入fdisk界面
  2. p:先看下分区信息,假设要删掉/dev/hdc1
  3. d: 这个时候要选择一个分区,就选1
  4. w 或者 q: w可存储到磁盘数据表,并离开fdisk; 如果后悔,直接按下q就可以取消刚才的删除操作。

新增磁盘分区

需要进行一下的动作:

  1. fdisk /dev/hdc: 先进入fdisk界面
  2. n: 新增分区
  3. p 或 e 或 l:选择不同的分区类型,其中p代表主分区,e代表扩展分区,l代表逻辑分区
  4. 1 - 4:分区号,可选1-4,如果是逻辑分区,则不需要输入分区号
  5. 输入结束柱面号码,如果要自己计算柱面/分区的大小太麻烦,可以使用类似"+512M"的形式,来让系统帮我们分配最接近512M的柱面号码
  6. p: 查看分区信息
  7. w 或者 q: w可存储到磁盘数据表,并离开fdisk; 如果后悔,直接按下q就可以取消刚才的删除操作。

对于创建分区的形式(主分区/扩展分区/逻辑分区)以及分区的大小,一般来说新建分区的形式会有下面的几种情况:

  1. 1-4号尚有剩余,且系统未有扩展分区:此时会出现让你挑选Primary/Extended的选项,且你可以指定1~4号间的号码
  2. 1-4号尚有剩余,且系统有扩展分区:此时会出现让你挑选Primary/Logical的选项,若选择p你还需指定1~4号间的号码;若选择l则不需要设置号码,因为系统会自动指定逻辑分区的文件名号码
  3. 1-4没有剩余,且系统有扩展分区:此时不会让你挑选分区类型,直接会进入logical的分区形式

一般分区完是需要重启(reboot)才能更新内核的分区表信息,可以使用"partprobe"强制让内核重新找一次分区表

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Linux日志式文件系统面面观

    文件系统是用来管理和组织保存在磁盘驱动器上的数据的系统软件,其实现了数据完整性的保 证,也就是保证写入磁盘的数据和随后读出的内容的一致性.除了保存以文件方式存储的数据以外,一个文件系统同样存储和管理关于文件和文件系统自身的一些重要信息(例如:日期时间.属主.访问权限.文件大小和存储位置等等).这些信息通常被称为元数据(metadata). 由于为了避免磁盘访问瓶颈效应,一般文件系统大都以异步方式工作,因此如果磁盘操作被突然中断可能导致数据被丢失.例如如果出现这种情况:如果当你处理一个在linux

  • 查看linux文件系统块大小的实现方法

    在linux系统上,可以用命令tune2fs ,测试如下 [root@localhost test10g]# tune2fs -help tune2fs 1.35 (28-Feb-2004) tune2fs: invalid option -- h Usage: tune2fs [-c max-mounts-count] [-e errors-behavior] [-g group] [-i interval[d|m|w]] [-j] [-J journal-options] [-l] [-s

  • 使用‘fsck’修复Linux中文件系统错误的方法

    前言 文件系统负责组织数据的存储和恢复方式. 无论如何,随着时间的推移,文件系统可能会被破坏,并且可能无法访问它的某些部分. 如果您的文件系统出现这种不一致,建议验证其完整性. 这可以通过名为fsck的系统实用程序( 文件系统一致性检查)完成. 此检查可在引导期间自动完成或手动运行. 在本文中,我们将回顾fsck实用程序及其用法,以帮助您修复磁盘错误. 何时在Linux中使用fsck 当您想要运行fsck时,有不同的场景. 以下是一些例子: 系统无法启动. 系统上的文件已损坏(通常您可能会看到输

  • Linux环境中使用Ext3文件系统

    Linux缺省情况下使用的文件系统为Ext2,ext2文件系统的确高效稳定.但是,随着Linux系统在关键业务中的应用,Linux文件系统的弱点也渐渐显露出来了:其中系统缺省使用的ext2文件系统是非日志文件系统.这在关键行业的应用是一个致命的弱 点.本文向各位介绍Linux下使用ext3日志文件系统应用. Ext3文件系统是直接从Ext2文件系统发展而来,目前ext3文件系统已经非常稳定可靠.它完全兼容ext2文件系统.用户可以平滑地过渡到一个日志功能健全的文件系统中来.这实际上了也是ext3

  • Linux中如何查看已挂载的文件系统类型详解

    前言 如你所知,Linux 支持非常多的文件系统,例如 ext4.ext3.ext2.sysfs.securityfs.FAT16.FAT32.NTFS 等等,当前被使用最多的文件系统是 ext4.你曾经疑惑过你的 Linux 系统使用的是什么类型的文件系统吗?没有疑惑过?不用担心!我们将帮助你.本指南将解释如何在类 Unix 的操作系统中查看已挂载的文件系统类型. 在 Linux 中查看已挂载的文件系统类型 有很多种方法可以在 Linux 中查看已挂载的文件系统类型,下面我将给出 8 种不同的

  • Linux新技术对象存储文件系统

    随着高性能计算由传统的主机方式向网络化集群演变,传统的基于主机的存储架构已逐渐向网络化存储发展,计算和存储分离的趋势越来越明显.针对 SAN 和 NAS 的不足,国际上已开展针对 Linux 集群的新型文件系统――对象存储文件系统的研究,本文重点论述了存储对象文件系统的架构.技术特点,并针对Lustre 对象存储文件系统进行了初步测试,结果表明对象存储文件系统在可扩展性.性能.易用性等方面都有显著提高,随着网络化存储技术的不断成熟,对象存储文件系统将成为重要的发展方向. 一.引言 高性能计算已由

  • 详细分析Linux文件系统

    本片文章针对Linux文件系统从原理到运行机制做了非常详细的理论分析,有助于读者对此深入的理解,以下是具体内容: Linux上的文件系统一般来说就是EXT2或EXT3,但这篇文章并不准备一上来就直接讲它们,而希望结合Linux操作系统并从文件系统建立的基础--硬盘开始,一步步认识Linux的文件系统. 1.机械硬盘的物理存储机制 现代计算机大部分文件存储功能都是由机械硬盘这种设备提供的.(现在的SSD和闪存从概念和逻辑上都部分继承自机械硬盘,所以使用机械硬盘来进行理解也是没有问题的) 机械硬盘能

  • linux文件系统调整大小的方法(linux调整分区大小)

    在使用linux的过程中, 有时会出现因为安装系统时分区不当导致有的分区空间不足,而有的分区空间过剩的情况.比如: 我在安装系统时给/usr/local分配器了5G的空间,但使用一段过程后发现, /usr/local最多只用到了1G.这样可以将/usr/local大小调整为1G. 空出4G留作他用.本文归纳了在不破快文件系统数据的前提下对文件系统大小进行调整的方法.这里采用的是"拆东墙, 补西墙"的方法. 当然, 如果你的磁盘中有未分区的空闲空间, 你就不用减小某个分区的空间了. 准备

  • Linux查看分区文件系统类型的方法总结

    前言 在Linux 中如何查看分区的文件系统类型,下面总结几种查看分区文件系统类型的方法.下面话不多说了,来随着小编一起学习学习吧 1: df -T 命令查看 这个是最简单的命令,文件系统类型在Type列输出.只可以查看已经挂载的分区和文件系统类型.如下所示: [root@mylnx008 ~]# df -T /dev/sdb Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sdb xfs 315467264 43564

  • Linux环境下使用GFS文件系统

    GFS文件系统其实是一个网络日志文件系统,通常被用作多台计算机共享同一存储设备.由于GFS是日志文件系统,所以,如果将其应用到单独的一台计算机上,即完全等同于 本地日志文件系统,享受日志文件系统带来的好处.本文便向各位简介GFS文件系统在linux环境下的使用. 一.下载与编译 GFS文件系统以前是一个源代码完全公开的项目,直至版本为GFS-4.2.0时都可以下载到源代码.笔者在写这一篇文章时,下载到了GFS4.2.0的源代码,但是现在再也无法下载到GFS4.2.0以后的代码了,因为GFS开始收

随机推荐