Linux文件系统理论和操作

2019-05-11

Linux文件系统

文件系统理论

  • windows:FAT16, NTFS…
  • Linux最广泛:ext2,三部分:
    • inode:记录文件的属性、权限、在分区中放置的数据区块、atime(最近读取时间)、mtime(最近修改时间);每个inode大小有限128B,所以支持的最多数据区块有限,比如1K大小的数据区块因Inode限制,仅能最大支持16GB的文件
    • 数据区块:存放文件内容,一个文件可以占用很多个数据区块。数据区块可以支持1K, 2K, 4K三种,越大的数据区块支持越大的总容量,比如4K支持16TB大小的分区
    • 超级区块:记录此文件系统(格式化为ext2的分区)的整体信息,比如inode的数量,数据区块使用量、数据区块大小(1K, 2K, 4K),文件系统挂载时间等
    • 由于ext2是这样索引式的文件系统,不需要碎片整理
    • 当文件系统很大时,ext2会自动分为区块群组,每个群组都会由inode,数据区块,超级区块。这时候会多一个文件系统描述(File System Description)来描述区块群 组。
    • 通常还有区块对照表和inode对照表记录使用和未使用的区块/inode
    • 元数据指超级区块、区块对照表和inode对照表,因为每次增删改都需要修改这三个部分
  • Linux目前趋势:xfs
    • 日志式文件系统
    • 格式化更快(不用预先规划出inode,区块),对高性能大磁盘和大文件支持好,对快速恢复支持好(有日志)。
    • 三个部分:
      • data section,类似ext2的inode,数据区块,超级区块
      • log section,日志区,记录文件系统的变化
      • realtime section,建立文件时,先在这里建立,再移入data section
  • Linux文件系统与Linux目录系统的联系:
    • 一个目录至少分配一个inode和一个数据区块,inode记录目录权限,数据区块记录在本目录下文件的inode。
    • 一个文件就是一个inode和对应的数据区块。
    • 使用ls -i查看文件对应的inode
  • Linux文件系统的运行
    • 用户访问文件
    • 从硬盘中读出文件到内存中,内存数据为【Clean】
    • 用户在内存中查看和修改文件,若有修改,内存数据为【Dirty】
    • 不定时写回硬盘,或手动调用sync命令写回硬盘,或关机命令隐含了写回硬盘的指令
    • 若中途断电,导致Dirty数据没有写回,会导致发生磁盘校验甚至文件系统损坏

文件系统操作

管理分区

分区操作都可以由GNU parted工具完成,包括创建分区,删除分区。分区创建后应该进行格式化才能使用。

$ parted /dev/sda1 #对sda1这块磁盘运行parted工具

格式化

格式化意思是将某种文件系统应用于存储设备中。

$ mkfs /dev/sda1 #make filesystem按照默认格式化(不同发行版有区别

内存交换(swap)分区

内存交换分区是用作Swap操作的硬盘分区,Swap分区是一片用来创建虚拟内存分区的磁盘分区,当内存不足时,将会使用硬盘中的虚拟内存,以防止内存溢出。

一般来说,在安装Linux时,一定要建立的内存分区,一个是根目录,一个就是内存交换分区。

操作:

  • 先用parted工具创建一个分区,和其他分区一样。例如我们创建了/dev/sda2这个分区

    $ sudo mkswap /dev/sda2 # 以Swap格式将分区格式化
    $ sudo swapon /dev/sda2 # 启动swap分区
    $ sudo swapoff /dev/sda2 # 关闭Swap分区
    

软硬链接

  • 软链接-类似Windows的快捷方式,链接文件仅仅是访问方式,当真实文件被删除了,链接就失效了。
  • 硬链接-一个文件,其inode指向原文件,当所有的硬链接被删除了,真实的数据文件才会被删除,更加安全。但不能对跨文件系统的文件建立硬链接,因为要用inode关联;也不能对目录建立硬链接。
$ ln -s data data2 #link 链接,-s表示软连接

挂载

挂载,指将一块存储设备(硬盘、U盘等)映射到Linux的指定目录,对该目录的操作即是对磁盘的读写。被挂在的设备应该已经被格式化为Linux支持的文件系统

$ sudo mount /dev/sda1 /media/disk1 #将磁盘sda1挂载到/media/disk1目录
$ sudo unmount /dev/sda1 #卸载磁盘

可以修改文件设置开机自动挂载:/etc/fstab

文件系统的其他操作

$ df -ih  #d file system查看磁盘容量 -i 以inode表示 -h 以G, M, K单位自动匹配大小,容易阅读
$ du data #d usage 查看单个文件大小
$ lsblk	#ls block 显示硬盘容量