磁盘文件管理

磁盘管理

机械式硬盘:
 U盘、光盘、软盘、硬件、磁带
分区
磁盘的逻辑边界

低级格式化-->划分磁道,扇区等

partition:分区,创建独立的文件系统
MBR:Master Boot Record 或者 Main Boot Record

0盘面,0磁道,0扇区 512Byte 主引导记录,独立于操作系统之外

划分为3个片段

  前446Byte:BootLoader,一段程序,引导加载器

  接下来64Byte

      每16Byte;标志一个分区

   最后2Byte:Magic Number

    标志MBR是否有效
BIOS

存储在RAM中的一段程序代码,完成电脑的自检,

开机时BIOS会被映射到内存中,之后系CPU会根据BIOS设置的启动顺序,读

取设备的MBR,BootLoder会到对应的分区中寻找操作系统内核,并帮助CPU将

操作系统内核读入内存,在内核读入内存并解压之,BootLoader将控制权交给

内核,之后内核运行自身

MBR:最多创建4个分区(主+扩展<=4),扩展只能有1个

扩展分区,指针,指向其他的分区

磁盘分区:按照柱面分区


磁盘相关知识

磁盘的读写延迟:磁头移动到数据所在的柱面的磁道上,或者磁头移动到相应的

磁道上,而并没有指向相应的扇区(盘片没转到数据所在的位置)会发生读写的延迟

衡量磁盘的优劣的重要指标--平均寻道时间

一般转速越快,自盘越好

硬盘的盘芯是真空的,否则会因为空气中的灰尘中的影响

笔记本 5400rpm(转/分)

台式机 7200rpm

工业级scsi 10K-15K级别

磁头与盘面的距离微米级别的

磁道越靠外,访问速率越高(角速度一样,弧长不同)

C盘通常是在比较外侧的磁道上

0磁道在最外侧

磁盘无法得知文件的开始与结束,需要给予磁盘逻辑的文件边界,即磁盘分区


文件的REST与磁盘操作

元数据

在分区上创建文件系统,文件系统并不是直接在分区上的,文件系统中的数据在分区上

文件系统相当于是一个软件,将分区划分成两部分,一部分叫做元数据(metadata)存储区,用于文件索引,

一部分为数据存储区,而数据存储区又逻辑的划分成一个一个存储单元,叫做块

元数据区域中有一块叫做块位图,用于集中存放块是否使用过的标记,每一个块用1bit表示

元数据 相当于一条一条的条目

用于存放元数据的空间大小需要与数据区域的大小相对应,如果

元数据区域存满了(条目存满了),则数据区也无法存入新的数据

inode

扫描元数据(inode),也需要inode位图(bitmap),位图中的数据相应位置的元数据条目是一一对应的,标志其是否空闲

元数据中的条目叫做inode

每一条inode,拥有全局唯一的编号

inode (index node)索引节点,它用来存放档案及目录的基本信息,记录的信息有编号,权限,

属主,属组,时间戳,大小以及存储的磁盘块信息等,就是没有文件名

inode 存放的磁盘块信息 间接指向与直接指向 间接指向,多级指针,指向磁盘块位置

inode 记录的文件数据至少有底下这些:

  • 该文件的存取模式(read/write/excute);
  • 该文件的拥有者与群组(owner/group);
  • 该文件的容量;
  • 该文件创建或状态改变的时间(ctime);
  • 最近一次的读取时间(atime);
  • 最近修改的时间(mtime);
  • 定义文件特性的旗标(flag),如 SetUID...;
  • 该文件真正内容的指向 (pointer);

inode 的数量与大小也是在格式化时就已经固定了,初次之外的特色

  • 每个 inode 大小均固定为 128 bytes;
  • 每个文件都仅会占用一个 inode 而已;
  • 承上,因此文件系统能够创建的文件数量与 inode 的数量有关;
  • 系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能够开始实际读取 block 的内容。

FAT32 最大文件4G

目录也是文件

根的位置存放的内核,系统启动时,内核自己读取,根是自引用的

磁盘块分为数据区区域和目录块 文件名存储在目录快,分为两部分,一部分为inode号,另一部分为目录下的文件名,称为dentry 目录项

dentry是一个纯粹的内存结构,由文件系统在提供文件访问的过程中在内存中直接建立

由于目录树是由根目录开始读起,因此系统透过挂载的信息可以找到挂载点的 inode 号码(通常一个 filesystem 的最顶层 inode 号码会由 2 号开始),此时就能够得到根目录的 inode 内容,并依据该 inode 读取根目录的 block 内的文件名数据,再一层一层的往下读到正确的档名。

对于目录文件,其inode记录中存储的是目录的inode号、目录的属性元数据和目录文件的block指针,这里面没有存储目录自身文件名的信息

在目录文件的数据块中存储了其下的文件名、目录名、目录本身的相对名称"."和上级目录的相对名称"..",还存储了指向inode table中这些文件名对应的inode号的指针(并非直接存储inode号码)、目录项长度rec_len、文件名长度name_len和文件类型file_type。注意到除了文件本身的inode记录了文件类型,其所在的目录的数据块也记录了文件类型。由于rec_len只能是4的倍数,所以需要使用"\0"来填充name_len不够凑满4倍数的部分。

目录的data block中并没有直接存储目录中文件的inode号,它存储的是指向inode table中对应文件inode号的指针

查找

/var/log/message

找到根对应的inode(自查找)-->根所对应的磁盘块-->var文件对应的inode号码-->元数据区var文件的inode号对应的条目

-->var文件的磁盘块-->log文件的inode的号码-->元数据区log文件的inode号相对应的条目-->log文件所对应的的磁盘块

-->message文件的inode号码-->元数据区域message文件的inode号对应的条目-->message文件的磁盘块-->访问数据

快速查找:建立缓存(dentry cache)

新建

/bak/test.txt 10K 磁盘块2K

首先扫描inode位图,寻找空闲的inode,用作bak文件的inode-->占用inode编号-->inode对应的磁盘块-->找到磁盘的目录区域-->新建条目,文件名为text.txt,inode号为

之前找到的bak文件的inode-->扫描块位图-->寻找空闲的磁盘块,存储文件

为了避免出现较多的磁盘碎片,会分配较多的磁盘块用于存储文件,多余的磁盘块会归为空闲状态

删除

删除磁盘块目录区域的文件名,对应的inode号不需删除-->块位图中,相应的位置标记为空闲状态

磁盘块的数据区,存储的数据没有删除-->块位图中,相应的位置标记为空闲-->存储新数据时,覆盖掉此前的数据

文件粉碎:找一大堆随机数据,覆盖掉该该磁盘块中原有的的数据

比较

复制文件 比较慢

创建新文件,并填充原有的数据的过程

剪贴 比较快

在同一个文件系统中,数据的路径改变,将其目录项放到另一个目录项中,而inode与磁盘块、数据没有发生变化

如果要跨分区,比较慢

在新分区建立一个文件,把老分区文件数据复制过去,在老分区上删除文件

分区

逻辑组\(块组  block group\)

全局描述信息,描述块组

每一个块组内部,有空闲块,inode位图等


链接文件

硬链接 指向同一个inode的不同文件,这些文件具有相同的inode号,称为硬链接

符号链接(软连接) inode区域中没有存储块编号,而存储了另外一个文件的路径(字符串) 大小:字符串的大小 常见权限777

硬链接

1、不能对目录文件做硬链接,只能对文件进行硬链接

2、不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。

3、创建硬链接,会增加文件被链接的次数

软链接

1、可以应用于目录

2、可以跨文件系统

3、不会增加文件被链接的次数

4、其大小为指向的路径所包含的字符个数

软链接与硬链接的区别

1、符号链接确实是一个新文件,它具有不同的I节点号;硬链接并没有建立新文件

2、删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据。

3、在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。

4、符号链接的大小是其链接文件的路径名中的字节数。

5、当用ln -s命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录

实例:

ls -l

第2个字段 数字表示文件被硬连接的次数

如果大于2,删除文件,并不会真正的删除,只有<=1时,才能彻底删除

ls -i

显示inode号


创建连接

ln

ln[-s -v] SOU DES

源文件:指定连接的源文件。如果使用-s选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件;

目标文件:指定源文件的目标连接文件。

不加参数,创建硬链接

-s或——symbolic:对源文件建立符号连接,而非硬连接;

-v或——verbose:显示指令执行过程;

*用ln -s命令建立符号链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进

行符号链接。而当源文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所

在路径不同,就不能进行链接。


磁盘空间

du

查看使用空间的,对文件和目录在磁盘使用的空间进行查看

-s或--summarize 仅显示总计,只列出最后加总的值。

-h或--human-readable 以K,M,G为单位

df

用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。

可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

-h或--human-readable:以可读性较高的方式来显示信息;

-i或--inodes:显示inode的信息;

-P或--portability:使用POSIX的输出格式;

占据磁盘块的文件:目录文件或者普通文件

pipe、设备文件等不占据磁盘块


设备文件
b 块设备 按块为单位,可以实现随机访问的设备

c 字符设备  按字符为单位  线性设备

块设备(b)

硬盘

字符设备

硬盘、键盘
查看设备文件 /dev

设备文件没有大小,而有主设备号与次设备号,并不占用磁盘空间

主设备号与次设备号存储在inode中,没有占据存储数据的磁盘块的大小

主设备号\(major number\)

    标示设备类型

次设备号\(minor number\)

    标识同一种类型的不同设备

系统通过主设备号与次设备号引用设备

创建设备文件
mknod

mknod [OPTION(参数)]... NAME(文件名) TYPE(文件类型) [MAJOR(主设备号) MINOR(次设备号)]

-m:设置权限模式,默认为644

硬盘设备的设备文件名

IDE,ATA: hd

SATA: sd

SCSI: sd

USB:sd

a,b,c,...来区分同一类型的下的不同的设备

IDE:

一个IDE口接两块硬盘

第一个IDE口:主 hda ,从 sdb

第二个IDE口:主 hdc ,从 hdd

USB,SATA

内核识别的顺序

sda,sdb,sdc...

主分区或者扩展分区编号

以IDE为例

hda1:第一个主分区或者扩展分区

hda2,hda3,hda4

逻辑分区

hda5,hda5....

文件系统属于内核的功能,但是创建文件系统需要用户结合内核来完成


文件系统
linux 的文件系统:

ext2(无日志功能)

ext3

ext4

xfs(企业级64位文件系统)

reiserfs(反删除功能很好)

btrfs(centos 7上)

光盘:

  • iso9660

网络文件系统:

  • cifs
  • nfs

集群文件系统:

  • gfs2
  • cofs2

内核级分布式文件系统:

  • ceph

windows的文件系统:

  • vfat(fat32)
  • ntfs

伪文件系统:

  • proc
  • sysfs
  • tmpfs
  • hugepagefs

unix的文件系统:

  • ufs
  • ffs
  • jfs

交换文件系统:

  • swap
    • swap对于Linux而言也算是一种分区类型

用户空间的分布式文件系统:

  • mogilefs moosefs
  • flusterfs

格式化

高级格式化:创建文件系统 mkfs -t ext3   

mkdir支持在不同文件的文件系统上创建文件

低级格式化

格式化分区的过程其实就是创建文件系

一个分区是一个文件系统

独立出来的文件,目录是在根下,但是用于存储的位置是在相应的磁盘的分区

如:独立出来 /var 将/dev/sda2挂在载到它的下面

fdisk

-l:列出指定的外围设备的分区表状况;

Boot列 *表示操作系统存在的位置

查看当前系统识别几块硬盘

fdisk -l [/dev/to/some_device_file]

管理磁盘分区

fidisk /dev/sda 交互式命令

`p:显示当前硬件的分区,包括未保存的

`

n:创建新分区

e:拓展分区

p:主分区

d:删除一个分区

w:保存并退出

q:不保存退出

t:修改分区类型

L:在t下查看支持的分区类型

l:显示所有支持的分区类型

fdisk操作完成后,内核没有读取到修改的数据(/proc/oartitons没有记录),需要是内核重新读取分区表

partprobe:使内核重新读取分区表(RedHat 5.x 上经常使用,6.x版本中常用partx)


所有的进程一般都运行在用户空间,操作模式为用户模式,没有特权

CPU4个级别(环)

ring0,ring1,ring2,ring3

内核一般运行在ring0上,即内核空间

用户进程运行在ring3上,即用户空间

ring1与ring2没有使用


文件的存储方式

存储分为两部分
  1. 元数据
    • 即文件的本身的基本信息,也叫Inode信息,包含文件的大小,权限 ,属主,属组,时间戳,数据块指针,Inode号、连接数等
    • 在文件系统创建时,元数据区域的空间已经被预留出来
  2. 数据
    • 即在数据区块占用的块,并将数据写入到块中

目录的存储方式

  1. 元数据
    • 即文件的本身的基本信息,也叫Inode信息,包含文件的大小,权限 ,属主,属组,时间戳,数据块指针,Inode号、连接数等
  2. 目录下的文件名
    • 包含目录下的文件名、及文件名的inode号码
    • 目录是为了完成文件的路径映射
  3. 根本身
    • 根是自引用的,引内核挂载根文件系统,并记录了根的位置,并且将信息缓存至内存中
  4. 文件名是记录在上级目录中


虚拟文件系统(VFS)

虚拟文件系统 Linux有VFS的存在所以支持众多不同的文件系统

不同的软件的操作统一到VFS,在作用到相应的文件系统

VFS属于内核模块

VFS 作为文件系统接口的根层。VFS 记录当前支持的文件系统以及当前挂装的文件系统。

可以使用一组注册函数在 Linux 中动态地添加或删除文件系统。内核保存当前支持的文件系统的列表,可以通过 /proc 文件系统在用户空间中查看这个列表。这个虚拟文件还显示当前与这些文件系统相关联的设备。在 Linux 中添加新文件系统的方法是调用register_filesystem。这个函数的参数定义一个文件系统结构(file_system_type)的引用,这个结构定义文件系统的名称、一组属性和两个超级块函数。也可以注销文件系统。

在注册新的文件系统时,会把这个文件系统和它的相关信息添加到 file_systems 列表中(见图 2 和 linux/include/linux/mount.h)。这个列表定义可以支持的文件系统。在命令行上输入cat /proc/filesystems,就可以查看这个列表。

VFS 中维护的另一个结构是挂装的文件系统(见图 3)。这个结构提供当前挂装的文件系统(见 linux/include/linux/fs.h)。它链接下面讨论的超级块结构。

file_operations

Linux为所有的设备文件都提供了统一的操作函数接口,方法是使用数据结构struct file_operations。

这个数据结构中包括许多操作函数的指针,如open()、close()、read()和write()等,但由于外设 的种

类较多,操作方式各不相同。Struct file_operations结构体中的成员为一系列的接口函数,如用于读/写

的read/write函数和用于控制的ioctl等。 打开一个文件就是调用这个文件file_operations中的open操作。

不同类型的文件有不同的file_operations成员函数,如普通的磁盘数据文件, 接口函数完成磁盘数据块读写操作;

而对于各种设备文件,则最终调用各自驱动程序中的I/O函数进行具体设备的操作。这样,应用程序根本不必考虑操作

的是设备还是普通文件,可一律当作文件处理,具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口。


ext2,ext3,ext4:扩展的文件系统,extended

ext2 文件系统

ext2 文件系统(也称为第二扩展文件系统)旨在克服早期 Linux 版本中使用的 Minix 文件系统的缺点。多年来,该文件系统一直广泛应用于 Linux。但 ext2 中没有日志,现在基本上已被 ext3 和最新的 ext4 所取代。

ext3 文件系统

ext3 文件系统向标准 ext2 文件系统添加了日志功能,因此是一个非常稳定的文件系统的一个演化发展。它在大多数情况下提供合理的性能并且仍旧在改进。由于它在可靠的 ext2 文件系统上添加了日志功能,因此可以将现有 ext2 文件系统转换为 ext3 文件系统,并且在必要时还可以转换回来。

ext4 文件系统是作为 ext3 的扩展来启动的,它通过增加存储限制和提高性能来满足更大文件系统的需求。为了保留 ext3 的稳定性,在2006 年 6 月,该扩展被拆分成一个新的文件系统,即 ext4。ext4 文件系统在 2008 年 12 月正式发布,包含在 2.6.28 内核中。不同于 ext3 的一些更改包括:

  • 文件系统可以设置为高达 1EB,文件多达 16TB。
  • 使用 extent 替代块映射,以此作为一种提高性能的方法。
  • 使用日志校验和 (Journal checksum) 来提高可靠性。
  • 更快的文件系统检查,因为检查过程中可以忽略未分配的块。
  • 使用延时分配和多区块分配器来提高性能和减少文件碎片。
  • 提供更细粒度的时间戳更改,一个新的创建日期(最终需要更新到其他许多库和实用工具,使其得到充分利用)。进一步的时间戳更改可以解决将时间戳存储为有符号的 32 位整数而引起的 2038 年问题。
EXT4文件系统

ext4文件系统的最大特点是在ext3的基础上使用区(extent,或称为段)的概念来管理。一个extent尽可能的包含物理上连续的一堆block。inode寻址方面也一样使用区段树的方式进行了改进。

默认情况下,EXT4不再使用EXT3的block mapping分配方式 ,而改为Extent方式分配。

(1). 关于EXT4的结构特征

EXT4在总体结构上与EXT3相似,大的分配方向都是基于相同大小的块组,每个块组内分配固定数量的inode、可能的superblock(或备份)及GDT。

EXT4的inode 结构做了重大改变,为增加新的信息,大小由EXT3的128字节增加到默认的256字节,同时inode寻址索引不再使用EXT3的"12个直接寻址块+1个一级间接寻址块+1个二级间接寻址块+1个三级间接寻址块"的索引模式,而改为4个Extent片断流,每个片断流设定片断的起始block号及连续的block数量(有可能直接指向数据区,也有可能指向索引块区)。

(2). EXT4删除数据的结构更改。

EXT4删除数据后,会依次释放文件系统bitmap空间位、更新目录结构、释放inode空间位。

(3). ext4使用多block分配方式。

在存储数据时,ext3中的block分配器一次只能分配4KB大小的Block数量,而且每存储一个block前就标记一次bmap。假如存储1G的文件,blocksize是4KB,那么每存储完一个Block就将调用一次block分配器,即调用的次数为1024*1024/4KB=262144次,标记bmap的次数也为1024*1024/4=262144次。


块组

多个块在逻辑上划分为一组,称为块组

每一个块组有对应的块位图与inode位图

磁盘扫描时,以块组为单位进行扫描

每个block的大小在创建文件系统时可以人为指定,不指定也有默认值,block(块大小):512*2^n

  1. 元数据区域(Inode区域)

    • Inode(每个Inode都有一个编号)

      • Inode包含大小、权限 、属主、属组、时间戳、数据块指针、inode号
  2. 数据区域 (block区域)

  3. bitmap(Inode位图,单块实现记录,即在块组中寻找一个块记录下相关信息)

    • 记录Inode的使用信息的索引,快速定位那些Inode号码没有被使用,使用0、1标识
  4. blockmap(块位图,单块实现记录,即在块组中寻找一个块记录下相关信息)

    • 记录block使用信息的索引,快速定位那些block号码没有被使用,使用0、1标识
超级块(super block)

位于元数据区域,保存整个分区的全局信息

如果超级块损坏,整个分区就挂了,所以允许有多个备份

保存的内容

1、块组的数量

2、块组中快的数量

3、块大小

4、空闲磁盘块与已用磁盘块

5、空闲inode与已用inode

.....

块组描述符表(GDT:group describtion table)

保存当前系统上块组的名称,块组中块的数量,以及每一个块组的开始磁盘块与结束磁盘块等信息

允许备份

ext文件系统每一个块组信息使用32字节描述,这32个字节称为块组描述符,所有块组的块组描述符组成块组描述符表GDT(group descriptor table)。

虽然每个块组都需要块组描述符来记录块组的信息和属性元数据,但是不是每个块组中都存放了块组描述符。ext文件系统的存储方式是:将它们组成一个GDT,并将该GDT存放于某些块组中,存放GDT的块组和存放superblock和备份superblock的块相同,也就是说它们是同时出现在某一个块组中的。

假如block大小为4KB的文件系统划分了143个块组,每个块组描述符32字节,那么GDT就需要143*32=4576字节即两个block来存放。这两个GDT block中记录了所有块组的块组信息,且存放GDT的块组中的GDT都是完全相同的。

data block

数据所占用的block由文件对应inode记录中的block指针找到,不同的文件类型,数据block中存储的内容是不一样的。以下是Linux中不同类型文件的存储方式。

  • 对于常规文件,文件的数据正常存储在数据块中。
  • 对于目录,该目录下的所有文件和一级子目录的目录名存储在数据块中。

文件名不是存储在其自身的inode中,而是存储在其所在目录的data block中。

  • 对于符号链接,如果目标路径名较短则直接保存在inode中以便更快地查找,如果目标路径名较长则分配一个数据块来保存。
  • 设备文件、FIFO和socket等特殊文件没有数据块,设备文件的主设备号和次设备号保存在inode中。
图示

Block

*MBR与任何分区无关,是一个扇区

*boot block 用于多操作系统的情况下,操作系统的boot loader的存放位置

*直接磁盘块指针、间接磁盘快指针、二级间接磁盘块指针、三级间接磁盘快指针

inode数量于磁盘块数量有一定的比例关系

etx3被称为日志文件系统(journal file system)

数据区、元数据区、日志区

加快文件系统修复的速度

/proc/filesystems:当前系统支持的文件系统类型


一些命令

mkfs :make file system
-t FSTYPE &lt;文件系统类型&gt;:指定要建立何种文件系统

mkfs -t ext2 就等于 mkfs.ext2

专门管理ext系列文件

用于创建磁盘分区上的“etc2/etc3”文件系统。

mke2fs
-j:创建ext3类型的文件分区

-b BLOCK\_SIZE:制指定块大小,默认为4096,可用取值有1024,2048,4096

-L  LABEL&lt;标签&gt;:设置文件系统的标签名称,指定分区的卷标

    例子: mk2fs -L MYDATA     /dev/sda2

-m \#&lt;百分比值&gt;:指定给管理员保留块数的百分比,预设为5%,后面直接跟数字即可

-i \#&lt;字节&gt;:指定"字节/inode"的比例,即多少个字节创建一个inode,默认为8192,这里给的数字因该为512\*2^n

-N:指定要建立的inode数目

-F:不管指定的设备为何,强制执行mke2fs

-E: 用户指定额外文件系统属性
blkid

查询或查看磁盘设备的相关属性

blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。

要使用这个命令必须安装e2fsprogs软件包。

e2label

用于查看或定义卷标

e2label 设备文件 卷标:设定卷标

tune2fs:调整文件系统的相关属性

-j:不损坏原有数据的情况下,为“ext2”文件系统添加日志功能,将其转换为“ext3”文件系统

-L LABLE:设置文件系统卷标

-m \#:调整预留块的百分比

-r:设置文件系统保留块的大小

-o:设置或清除文件系统加载的特性或选项

    acl

-c \#:指定挂载的次数达到\#次之后,进行自检,0或者-1表示关闭此功能

-i \#:指定挂载多少天后进行自检

-l:显示文件超级块的信息

    Filesystem state: 为clean表示没有要修复的文件,若为dusty
dumpe2fs

显示文件属性信息,适用于ext2或者ext3

    -h:仅显示超级块信息
fsck

检查并修复Linux文件系统

-t FSTYPE:指定文件系统类型

-a:自动修复
e2fsck

专用于修复ext2/ext3文件系统

-f:强制检查

-p:自动检测

挂载:将新的文件系统关联至当前根文件系统

卸载:将某文件系统与当前根文件系统的关联关系移除

mount:挂载
mountL 设备 挂载点
设备

    设备文件: /dev/sda5

    卷标:LABEL=""

    uuid:UUID=""

挂载点:目录

    要求

        1、目录存在

        2、目录没有被其他进程使用

        3、目录中原有的文件会被暂时隐藏

挂载完成后,要通过挂载点访问对应文件系统上的文件

mount:显示当前系统已经挂载的设备及挂载点

mount [options] [-o options] DEVICES MOUNT_POINT

-a:表示挂载/etc/fstab文件中定义的所有文件系统

-n:默认情况下,mount命令每挂载一个设备,都会把挂载的设备信息

    保存至/etc/mtab文;使用-n选项意味着挂在设备时,不把信息写如此文件

-t FSTYPE: 指定正在挂载设备上的文件系统的类型,不使用此选项时,mount会调用

            blkid命令获取对应的文件系统类型

-r:只读挂载,挂载光盘时常用此选项

-w:读写挂载



-o:指定额外的挂载选项,即指定文件文件系统的属性

 remount:重新挂在当前文件系统

 sync:同步

umount:卸载某文件系统

umount 设备

umount 挂载点

卸载注意事项

挂载的设备没有进程在使用

X86架构:

物理地址 (physical address): 放在寻址总线上的地址

虚拟地址 (virtual address): CPU启动保护模式后,程序运行在虚拟地址空间中。注意,并不是所有的“程序”都是运行在虚拟地址中。CPU在启动的时候是运行在实模式的,

Bootloader以及内核在初始化页表之前并不使用虚拟地址,而是直接使用物理地址的。

32bit寻址

每个进程有4G虚拟地址可用,分为两段,其中1G被系统使用,其他的被进程使用,虚拟地址

映射到物理地址的页框(page frane) 或者硬盘空间(swap)

交换内存:

根据系统需要,将主存中的某个作业部分或者全部移动到外存,而把外存中的某个移动到

相应的主存储区,并使其运行

页框(page frame)--内存管理的概念,CPU中添加了能自动把虚拟内存(即逻辑地址)地址转化为物理内存地址的电路,为了简化这种电路,

就把RAM划分为长度为4KB或8KB的块,这种块就叫页框。

80286CPU以后,引入了虚拟地址(线性地址)

CPU:time slice(时间片)

swap分区

free

查看内存(mem与swap)使用状况

-m:以MB显示

-L LABEL

swapon /dev/sda5 启用

-a:将/etc/fstab文件中所有设置为swap的设备,启动为交换区

swapoff /dev/sda5 关闭


回环设备 lookback

使用软件来模拟实现硬件

允许用户以一个普通磁盘文件虚拟一个块设备

设想一个磁盘设备,对它的所有读写操作都将被重定向到读写一个名为 disk-image 的

普通文件而非操作实际磁盘或分区的轨道和扇区。(当然,disk-image 必须存在于一个

实际的磁盘上,而这个磁盘必须比虚拟的磁盘容量更大。)回环设备允许你这样使用一个普通文件。

回环设备以 /dev/loop0、/dev/loop1 等命名。每个设备可虚拟一个块设备。注意只有超级用户才有权限设置回环设备。

dd

用于复制文件并对原文件的内容进行转换和格式化处理

if 代表输入文件。如果不指定if,默认就会从stdin中读取输入

of 代表输出文件。如果不指定of,默认就会将stdout作为默认输出

bs 代表字节为单位的块大小。

count 代表被复制的块数。

seek=<区块数>:创建数据文件时,跳过的空间大小

例子:

dd if=/etc/inittab of=/tmp/inittab

cp复制文件以文件为单位进行复制,dd则直接复制底层的数据流

cp:将文件内容先拷贝到内存,然后写入到目标位置,通过VFS

dd:直接复制01代码

复制一块磁盘的MBR到usb设备,实现备份

dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1

写回MBR

dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1

cat /dev/cdrom ->/root/rhel5.iso 制作光盘镜像

/dev/zero 该设备无穷尽地提供0(是ASCII 0 就是NULL),可用它来初始化文件

/dev/null 它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃

mkswap

用于在一个文件或者设备上建立交换分区。

在建立完之后要使用sawpon命令开始使用这个交换区

创建lookback dev 用于swap

dd if=/dev/zero of=/var/swapfile bc=1M count=1024

mkswap /var/swapfile

swapon /var/swapfile

dd if=/dev/zero of=/var/swapfile2 seek=1023 bc=1M count=1024

使用ls -lh查看,文件大小为1G,而使用du -sh查看时,大小只有1.1M

该设备文件被虚拟的,大小由实际填充的数据而定,可增长

mount,可以挂载iso镜像

mount DEVICES MOUNT_POINT

-o loop:挂载本地回环设备,可用来挂载iso镜像

例子:

wget ftp://172.16.0.2//pub/rhci-5.8.1.ios /root

mount -o loop /root/rhci-5.8.1.ios /media


/etc/fstab

文件系统的配置文件

os初始化时会自动挂载此文件中定义的文件系统

各列含义

1、file system:用来指定你要挂载的文件系统的设备名称或块信息,也可以是远程的文件系统

        可以使用设备名,UUID或者LABEL来指定

2、mount point:挂载点,也就是自己找一个或创建一个dir(目录),然后把文件系统挂到这个目录上,然后就可以从这个目录中访问要挂载文件系统。

        对于swap分区,这个域应该填写:none,表示没有挂载点。

3、type:用来指定文件系统的类型。

4、options:用来填写设置选项,各个选项用逗号隔开,默认选项defaults

5、dump(转储频率):多长时间进行一次完全备份

            此处为1的话,表示每隔一天进行一次完全备份,以此类推;为0的话,表示不备份

6、pass:用来指定如何使用fsck来检查硬盘顺序,一般而言只有根才能为1,0表示不检查

例子

/dev/sda /mnt/test ext2 defaults 0 0

mount -a 挂载在/etc/fstab文件中的所有文件系统

fuser

用于报告进程使用的文件和网络套接字,列出了本地进程的进程号,那些本地进程使用file,参数指定的本地或远程文件。

    对于阻塞特别设备,此命令列出了使用该设备上任何文件的进程。

-v:

-k:杀死访问指定文件的所有进程

-m:指定一个被加载的文件系统或一个被加载的块设备

fuser -km MOUNT_POINT 终止正在访问次挂载点的所有进程

results for ""

    No results matching ""