jinhucheung / blog

学习笔记
6 stars 3 forks source link

Linux 学习之磁盘与文件系统管理 #18

Open jinhucheung opened 8 years ago

jinhucheung commented 8 years ago

Index

jinhucheung commented 8 years ago

1. Linux的文件系统与VFS

1.1 Linux支持的文件系统

ls -l /lib/modules/$(uname -r)/kernel/fs
#查看系统支持的文件系统
#$(uname -r):查看系统的内核版本号

cat /proc/filesystems 
#查看目前已加载到内存中的文件系统

1.2 Linux VFS

虚拟文件系统(Virtual FileSystem Switch,VFS),管理Liunx所支持的各种文件系统,对上提供给系统调用封装好的接口,对下调用各文件系统模块.整个VFS缩略图如下:

jinhucheung commented 8 years ago

1.3 Linux的Ext2文件系统


jinhucheung commented 8 years ago

1.4 Ext2文件系统与目录树的关系

kumho@kumho-Inspiron-3421:~$ ls -dil / /etc /etc/passwd
     2 drwxr-xr-x  22 root root  4096  7月 18 16:49 /
784897 drwxr-xr-x 135 root root 12288  7月 24 17:16 /etc
812534 -rw-r--r--   1 root root  1899  7月 18 21:50 /etc/passwd
  1. /的inode
    通过挂载点信息找到inode为2的根目录inode,判断用户是否具有x,r权限,有则读取/的block
  2. /的block
    上步骤取得block号码,并找到/etc的inode号码(784897)
  3. /etc的inode
    访问/etc的inode,判断用户是否具有需要的权限,有则读取/etc的block
  4. /etc的block
    找到./passwd的inode(812534)
  5. /etc/passwd的inode
    访问/etc/passwd的inode,判断用户是否具有需要的权限,有则获取其block号
  6. /etc/passwd的block
    从block中读取数据
jinhucheung commented 8 years ago

1.5 日志文件系统

日志文件系统保护了数据的完整,避免不当的操作或突发情况造成数据的损坏,可以恢复数据

写入/修改文件时的流程:

1.6 文件系统与内存

Linux为了解决文件频繁写入硬盘中,效率慢,采用异步处理,将数据先加载至内存中,内存中的某块数据被用户修改后,会设置Dirty标志,系统会不定时将带Dirty标志的数据写回硬盘,用户可以用sync将内存中的数据写回硬盘(关机时,系统会自动调用sync)

1.7 挂载点

一个文件系统的最顶层目录是挂载点,可以知道挂载点一定是目录,其inode编号通常为2.

# mount /dev/sda12 /mnt/usr
# ls -dil /mnt/usr /
2 drwxr-xr-x 22 root root 4096  7月 18 16:49 /
2 drwxr-xr-x  3 root root 1024  7月 24 20:56 /mnt/usr

通常我们判断是否为同一个文件是查看其inode编号

jinhucheung commented 8 years ago

2. 连接文件:ln

Linux连接文件有两种,一种是硬连接(hard link),一种是类似Windows的快捷方式,称为符号连接(symbolil link),两种都使用命令ln来实现




jinhucheung commented 8 years ago

3. 查看文件系统及硬盘状况

3.1 查看某文件系统的超级块

3.2 查看系统内的文件系统(当前系统挂载情况)

3.3 查看某文件的容量

3.4 查看硬盘分区情况

3.5 查看硬盘某分区的UUID

jinhucheung commented 8 years ago

4. 硬盘的分区/格式化/检验与挂载

4.1 硬盘的分区

使用命令fdisk 文件设备名 比如fdisk /dev/sda 注意/dev/sda代表整块硬盘,不能使用/dev/sda1某分区

使用命令后进入fdisk程序区,相关的子命令:

当我们新建完分区后,系统提示我们重启,让内核能重新查找分区表

当然我们可以用partprobe强制让内核查找分区表(我自己试着不行,格式化还是找不到分区),或者使用mount -o remount,rw,auto /强制让根目录重新挂载

4.2 文件系统格式化

对某分区进行格式化,主要是将文件系统的相关信息写入到分区中(不写入这些信息,系统怎么知道你这块分区是什么类型的文件系统呢)

使用命令mkfs [-t 文件系统格式] 设备文件名

如果想知道mkfs支持哪些文件系统的格式化,可以mkfs[TAB][TAB]

4.3 硬盘检验

4.4 硬盘挂载与卸载

4.5 硬盘参数修改

4.6 开机挂载

开机挂载需要将挂载条目添加至/etc/fstab文件中,之后使用mount -a进行测试(按着/etc/fstab重新挂载)

4.7 特殊设备loop挂载

jinhucheung commented 8 years ago

5. 内存交换空间(Swap)的构建

Swap:系统物理内存不足时,将数据移到Swap空间

Swap构建分以下两种方式

构建Swap的步骤:

  1. 创建分区/文件: 创建分区使用fdisk,创建大容量文件使用上节的命令dd if=/dev/zero of=文件名 bs=块大小 count=块数量
  2. 格式化 : 使用mkswap 文件名
  3. 加载/卸载 : 加载文件使用swapon 文件名 卸载文件使用swapoff 文件名
  4. 查看:使用free查看内存使用情况