目录
1.硬盘的基础知识
2.Linux的EXT2文件系统(inode)
3.日志文件系统(Journaling filesystem)
4.文件系统管理
5.磁盘分区:
6.格式化分区(磁盘格式化):
7.磁盘挂载与卸除(mount,umount)
7.1.挂载 :mount
7.2.卸除装置:umount
8.特殊装置 loop 挂载 (映象档案不刻录就挂载使用)
9.内存置换空间(swap)的建立
分区的概念:
分区从实质上说就是对硬盘的一种格式化。当我们创建分区时,就已经设置好了硬盘的各项物理参数,指定了硬盘主引导记录(即 MasterBootRecord,一般简称为 MBR)和引导记录备份的存放位置。而对于文件系统以及其他操作系统管理硬盘所需要的信息则是通过以后的高级格式化,即 Format 命令来实现。面、磁道和扇区硬盘分区后,将会被划分为面(Side)、磁道(Track)和扇区(Sector)。需要注意的是,这些只是个虚拟的概念,并不是真正在硬盘上划轨道
MBR简介:
MBR(Main Boot Record 主引记录)位于整个硬盘的 0 磁道 0 柱面 1 扇区。不过,在总共 512 字节的主引导扇区中, MBR 只占用了其中的 446 个字节,另外的 64 个字节交给了DPT(Disk Partition Table 硬盘分区表),最后两个字节“55, AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。
分区的原理:
主引导记录由三部分组成:一部分是 446byte 的操作系统引导代码(MBR),还有一部分是 64byte 的主分区表(DPT)。
主分区表最多记录四个主分区的分区信息.每个分区占用 16byte.分区就是修改分区表,它不影响硬盘上的存
储的数据。最后的 2 字节是结束标志。
扩展技术:需要将一块硬盘分成更多的分区,超过 5 个以上的分区,可以将最多四个主分区中的一个分
区类型改为扩展分区,然后在扩展分区中再建逻辑分区。逻辑分区的分区信息保存在扩展分区之中,叫做扩
展分区表。理论上逻辑分区没有个数的限制。扩展分区不能被直接使用,必须将其划分为若干个逻辑分区。
逻辑分区的起始位置的信息都写在扩展分区表里面。逻辑分区的分区编号从 5 开始,如: /dev/hda5 是第一
块硬盘的第一个逻辑分区。
格式化原理:
分好区的硬盘分区上面什么数据也没有,操作系统也不能读写,为了让操作系统能够识别必须向分区中预写入一定格式的数据。这个过程就称之为格式化。在 Linux 中称为创建文件系统。没有分区的硬盘是不能格式化的,没有格式化的分区是不能直接被使用的。所以分区和格式化往往都是同时进行的。
现在我们已经大概知道了一个硬盘的结构,当我们新买来一块硬盘时,必须经过分区和格式化才能进行使用,下面用简图表示一下一个硬盘的结构:
superblock:记录此 filesystem 的整体信息,包括 inode/block 的总量、使用量、剩余量, 以及文件系统的格式与相关信息等。
inode:记录档案的属性,一个档案占用一个 inode,同时记录此档案的数据所在的 block 号码。
block:实际记录档案的内容,若档案太大时,会占用多个 block。
注意:
1.inode 与 block 都有编号,而每个档案都会占用一个 inode ,inode 内则有档案数据放置的block 号码,如果能找到档案的inode 就可以找到档案。
2.在inode记录一个文件需要128字节大小的内存
为什么需要使用EXT2文件系统?
如果我的文件系统高达数百 GB 时, 那么将所有的 inode 与 block 通通放置在一起将是不理智的决定,因为 inode 不 block 癿数量太庞大,不容易管理。
因此 Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) 的,每个区块群组都有独立的 inode/block/superblock 系统。
简图如下:
Superblock (超级区块):Superblock(大小为1024byte) 是记录整个 filesystem 相关信息的地方,它记录的信息有如下:
Filesystem Description (档案系统描述说明)
block bitmap (区块对照表):
inode bitmap (inode 对照表):
data block (资料区块) :
data block 是用来放置档案内容数据地方,在 Ext2 文件系统中所支持癿 block 大小有 1K, 2K 及 4K三种而已。在格式化时 block 的大小就固定了,且每个 block 都有编号,以方便 inode的记录。
需要解决的问题:单个档案存储数据大小的限制
按照这种逻辑方式,一个inode可以记录最大的文件就是为128k,但是实际情况却不是这样,在我们现在的系统中,有很多的文件都是大于128k的,如何解决这个问题呢?
为此我们的系统聪明的将 inode 记录 block 号码的区域定义为 12 个直接,一个间接, 一个双间接不一个三间接记录区。
在EXT2文件系统中,就把Inode区分如上图所示:
直接记录区:里面有12个直接指向block的对照,储存的是真正存储档案的block的编号,而存储一个block需要的字节数是4个字节,共占用这个Inode的12*8=48字节。可以记录的容量是:12*4kb=48k
间接记录区:一个间接记录区其实也就是4个字节的大小,他不是真正存放档案的地方,它存放的是真正数据存放的block,比如设置这个block是4kb大小的,那么
双间接记录区:一个block的大小仍然设置为4k,那么
三间接记录区:可以存放当个档案数据的最大容量是:1024*1024*1024*4=4T的大小
例子:
查看一个文件的inode编号:
使用命令:ls -i 文件名
查看档案处于哪些block之间:
使用命令:filefrag -v 文件名
查找系统目前挂载的装置:df
语法:
df [选项] [目录或者文件]
选项:
选项 | 含义 |
-a | 列出所有的文件系统,包括系统特有的/proc |
-k | 以kByte的容量显示各文件系统 |
-m | 以Mbyte的容量显示各文件系统 |
-h | 以人类适合看的格式显示 |
-H | 以M=1000k取代M=1024k的进位方式 |
-T | 连同partition的filesystem名称也列出 |
-i | 不使用硬盘容量,而以inode的数量显示 |
使用命令:df
查看挂载点的详细信息:
使用命令: dumpe2fs [选项] 装置文件名
选项:
选项 | 含义 |
-b | 列出保留为坏轨的部分 |
-h | 仅列出superblock的数据 |
例子:
查看/dev/sda1装置的详细信息:
Superblock的内容:
block group的信息:
该区块与门在记录写入或修订档案时的步骤
1. 预备:当系统要写入一个档案时,会先在日志记录区块中记录某个档案准备要写入的信息;
2. 实际写入:开始写入档案的权限与数据;开始更新 metadata 的数据;
3. 结束:完成数据与 metadata 的更新后,在日志记录区块当中完成该档案的记录。
功能是什么呢?
在这样的程序当中,万一数据的执行过程当中发生了问题,那么我们的系统只要去检查日志记录彔区块,就可以知道哪个档案发生了问题,针对该问题来做一致性的检查即可,而不必针对整块 filesystem 去检查, 这样就可以达到忚速修复 filesystem 的能力了.
注意:ext3文件系统相比ext2文件系统就多了一个日志文件系统的功能。
1.查看文件夹大小
语法 :
du [选项] [档案或目录名称]
选项:
选项 | 含义 |
-a | 列出所有de 档案与目录容量,因为默认仅统计目录底下的档案量而已。 |
-h | 以人们较易读的容量格式 (G/M) 显示; |
-s | 列出总量而已,而不列出每个各别癿目录占用容量 |
-S | 不包括子目录下癿总计,与 -s 有点差别 |
-k | 以 KBytes 列出容量显示 |
-m | 以 MBytes 列出容量显示 |
2.实体链接与符号链接:ln
Symbolic Link (符号链接,亦即是快捷方式)
软链接,就是window系统的快捷方式
在命令行创建一个软连接的方式是,使用命令 ln:
语法:
ls [选项] 来源文件 目标文件
选项:
选项 | 含义 |
-s | 如果不加任何参数就进行连结,那就是 hard link(硬链接),至于 -s 就symbolic link(软链接) |
-f | 如果 目标文件 存在时,就主动的将目标文件直接移除后再建立 |
例子:
创建一个文件test,然后创建它的软链接test01
Hard Link (实体链接, 硬式连结或实际连结)
在前面的磁盘管理中,我们已经知道,每个档案会占用一个inode来记录,想要读取该档案,必项要经过目录记录的文件名来指向到正确的 inode 号码才能读取档案。
例子:复制一个services文件夹到 /mnt然后查看他的硬链接数
在 /mnt 下复制一个services文件,命名为,copy01
现在把 copy01删除,然后给services做一个硬链接:链接到copy02
小结:也就是说同一个文件有几个inode,也就是这个文件有几个名字。
注意事项,硬链接是不能夸分区使用的:
相关命令语法:
选项:
选项 | 含义 |
-l | 输出后面接的装置所有的 partition 内容。若仅有 fdisk -l 时,则系统将会把整个系统内能够搜索到的装置的 partition 均列出来 |
例子:
查看系统的硬盘以及分区信息:
如果系统有多块硬盘的话可以可以分开查看,比如现在有一块硬盘,设备名为: /dev/sda
使用命令: fdisk -l /dev/sda ,看到的结果和上边是一样的,因为只有一块硬盘。
对磁盘进行分区,分区之前先搞懂一个概念,当我们分区的时候不是对分区进行分区,而是对一块硬盘进行分区,比如说上面的硬盘只有一块,那就是 : /dev/sda 。
现在开始操作,对硬盘 /dev/sda 进行分区:
使用命令: fdisk /dev/sda
Command (m for help): m <== 输入 m 后,就会看到底下这些指令介绍
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition <==删除一个 partition(分区)
l list known partition types
m print this menu
n add a new partition <==新增一个 partition
o create a new empty DOS partition table
p print the partition table <==在屏幕上显示分割表
q quit without saving changes <==不储存离开 fdisk 程序
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit <==将刚刚得动作写入分割表
x extra functionality (experts only)
打印一下分区的个数,用参数p
创建一个新的分区,用参数:n ,询问创建一个是主分区还是扩展分区,通过前面的对磁盘的了解,知道主分区只能有4个主分区,如果分区的个数大于4个,那么就需要使用扩展分区,然后使用扩展分区,然后再扩展分区内新建逻辑分区(逻辑分区的盘符号默认从5开始(比如: /dev/sda5 .....)):
因为现在只有三个主分区,所以还是可以新建一个主分区的,直接使用参数,p ,再建立一个主分区,系统类型是Linux
改变分区的系统类型,使用参数: t
删除一个分区:使用参数 : d
新建一个扩展分区:先使用参数:n ,再使用参数 : e
现在磁盘划分如下所示,而扩展分区还可以继续划分分区,称为逻辑分区(编号从5开始):
创建逻辑分区:
保存并退出,使用命令:w,直接退出不保存更改:q。
现在我保存这个更改,使用参数:w
注意保存了之后,需要去更新分区表,只需去跟新修改的硬盘的分区表:
使用命令: partprobe + 设备名称,也就是 : partprobe /dev/sda
此时再去查看这个硬盘,可以发现多了一个扩展分区和逻辑分区了:
在磁盘管理的时候提到过,单单是划出一个分区是不能用的,但是想要这个分区,需要根据不同的文件系统格式化后才能在文件系统中使用这个分区(如EXT3文件系统,会有superblock ,blockgroup,inode对照表,date block等东西):
语法:
mkfs [选项 文件系统格式] 装置文件名
选项:
选项 | 含义 |
-t | 可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效) |
例子:
格式化:/dev/sda5分区,可以看到默认的block的大小是 1k=1024byte
注意:命令:mkfs -t ext3/dev/sda5 等同于 mkfs.ext3 /dev/sda
当然再格式化之前也是可以指明block的大小的,重新格式化一下:/dev/sda5分区
使用命令:mkfs -t ext3 -b 4096 /dev/sda5(mkfs.ext3 -b 4096 /dev/sda)
当我们格式化了以后理论就能使用这个分区来储存数据了,因为ext3文件管理系统已经可以管理这个分区了,但是,必须把分区挂载(mount)起来才能用:
挂载点的意义:
挂载点是目录,而这个目录是进去磁盘分区槽(其实是文件系统啦!)的入口。就比如一个房子的东西你全部建好了,但是没有一个地方可以进去,那岂不是建的再好都是没有意义了。
再者,在Linux的系统只有一个盘符可以使用(也就是斜杠 "/"),所以必须把分区挂载到这个盘符里面才可以使用分区(window的盘符可以使用C-Z来表示盘符,但是当我们有很多分区的时候,这些盘符不够用怎么吗?那就只能采用挂载的方式,把这个没有分配盘符的分区挂载到已经分配盘符分区的目录下(比如现在一个分区没有盘符,你又想使用这个分区,那么你可以挂载到:C:/mount 目录下,那么当你访问mount 这个目录的时候,其实访问的就是这个没有盘符的分区)),关键的一点是,Linux用于磁盘的盘符只有一个,那就是 反斜杠:"/"这个符号,所以你想使用多个分区,你是一定要挂在到:"/" 的目录下才可以使用。
挂载注意事项:
- 单一文件系统不应该被重复挂载在不同 的挂载点(目录)中;
- 单一目录不应该重复挂载多个文件系统;
- 要作为挂载点的目彔,理讳上应该都是空目录才行
语法:
简单的命令: mount 外部设备 目录
选项参数:
选项参数 | 含义 |
-t | 与fsck相似,指定一个文件系统类型,但是Linux可以自动分析Superblock的内容,从而分辨出文件系统的类型,这个参数一般可以省略。 |
-a | 依照配置文件 /etc/fatab 的数据将所有为挂载的磁盘全部挂载上来 |
-l | 单纯输入mount 会显示目前的挂载信息,加上 -l 可增加列Lable名称 |
-n | 在默认情况下,系统会将实际挂载的情况实时写入 、/etc/mtab 中,但是某些情况下不会自动写入,比如单人维护模式,此时加上这个选项,就会写入了。 |
-L | 系统除了利用装置文件名(如:/dev/sda5)之外,还可以利用文件系统的Labe进行挂载。 |
-o | 此参数后面可以接一些挂载时额外加上的参数,比如说账号、密码、读取权限等。
|
注意: -o参数的常用选项:
ro, rw: 挂载文件系统成为叧读(ro) 或可擦写(rw)
async, sync: 此文件系统是否使用同步写入 (sync) 或异步 (async) 的内存机制。
auto, noauto: 允许此 partition 被以 mount -a 自动挂载(auto)
dev, nodev: 是否允许此 partition 上,可建立装置档案, dev 为可允讲
suid, nosuid: 是否允许此 partition含有 suid/sgid 的文件格式
exec, noexec: 是否允许此 partition 上拥有可执行 binary(二进制) 档案的权限。
user, nouser: 是否允许此 partition 让任何使用者执行 mount 命令一般来说,mount 仅有 root 可以执行,但下达 user 参数,则可让一般 user(用户) 也能够对此 partition 进行 mount 。
defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async
remount: 重新挂载,用于在系统出错,或重新更新参数时。
例子:
按照前面的所述,我们挂载的分区,必须是在: "/" 目录下的目录才可以。
先查看一下现在已经挂载的设备(使用命令:df),发现 、/dev/sda5 这个分区还没有挂载使用命令,把 /dev/sda5 这个设备挂载到:/mnt/sda5 上:
例子 :
-o参数的作用
现在让 :/dev/sda5 进行重新挂载,然后再把此分区设为只读的权限:
使用命令:mount -o remount,ro /mnt/sda5
例子:
我们知道我们所使用的,ls命令存在于 /bin/ls目录下,执行它是显示档案的信息,现在我们将它拷贝到 、/mnt/sda5这个文件夹,也就是此分区上,如果不加上特殊的权限,是可以正常的执行 ls 这个文件的,但是给它重新挂载,然后然他没有可执行权限,试一下结果是什么:
语法:
umount [选项] 装置文件名或挂载点
选项:
选项 | 含义 |
-f | 强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情況下 |
-n | 不更新 /etc/mtab 情况下卸除 |
例子:
现在将挂载在:/mnt/sda5 的设备给卸除:
使用命令:umount /mnt/sda5
注意事项:
当你使用命令:mount /dev/sda5 /mnt/sda5 挂载设备时,设备已经是能够正常使用了,但是当你重启你的系统时,系统不会重新去挂载你的设备,你需要在:/etc/fatab 这个档案说明进行说明,每次开机后才会进行挂载的命令:
如上图添加了之后,以后每次系统开机都回去自动挂载这个分区了。
1.当你有下载了一个相对比加大的镜像文件,不一定需要刻录到实体光盘才能使用,可以使用特殊的装置 loop 来挂载。
注意,挂载镜像文件需要加上参数,-o loop
例如:把aa.iso镜像文件,挂载到 :/test 目录下:使用命令:muount -o loop aa.iso /test
如果需要开机自动挂载这个镜像文件:在。 /etc/fatab 加上
/root/aa.iso /mnt iso9660 defaults,loop 0 0
2.建立大档案以制作 loop 装置档案!
制作出一个大档案,然后将这个文件格式化后进行挂载,可以解决:很多系统的分割不良的情冴,比如,如果当初在分割时, 你叧有分割出一个根目彔,假设你已经没有多余的容量可以进行额外的分割,偏偏根目录的容量还很大! 此时你就能够制作出一个大档案,然后将这个档案挂载,这样就像是多了一个分区了。
3.建立大型档案,
使用命令:dd
例子:
在 : /test 建立一个档案名为newdev,新建一个200M的大档案,如何做呢?
看一下这个档案的信息,可以看到这个档案的大小是200M:
现在档案已经建立好了,想要使用的话,还需要格式化:
使用命令:mkfs -t ext3 /test/newdev
挂载分区,注意加上 : -o loop 参数
把这个分区挂载在:/mnt/loopdev 下面:
使用命令:mount -o loop /test/newdev /mnt/loopdev
同理,想要在每次开机的时候自动挂载,就必须把这分区在 :/etc/fstab 进行注册。
swap 的功能就是在应付物理内存不足的情况下所造成癿内存延伸记录的功能。一般来说,如果硬件的配备足够的话,那么 swap 应该不会被我们的系统所使用到, swap 会被利用到的时刻通常就是物理内存不足癿情况了。
8.1.使用实体分割槽建置 swap
查看下当前系统的交换分区,有一个,/dev/sda3
使用分区的方式添加一个分区,然后给swap虚拟内存即可(详细步骤看上面的第五点磁盘分区):
使用命令: fdisk /dev/sda
成功建立一个分区,但是文件系统类型是Linux的:
使用参数 t 去改变系统类型:
新建一个swap分区成功:
保存并退出
更新分区表,使用命令:partprobe 设备名称,即:partprobe /dev/sda
使用命令:mkswap 对 /dev/sda6 进行格式化,格式化成swap分区,即:mkswap /dev/sda6
激活交换分区,使用命令:swapon 设备名称,即:swapon /dev/sda6
提示:如果想关闭这个swap分区的话,使用命令:swapoff 设备名,就可以关闭这个swap分区了。
通过上面我们知道,如果我们不在 ,/etc/fatab 注册一下这个分区的话,下次开机之后,它不会重新去挂载这个分区的,所以需要把这个swap分区添加进去:
2.使用档案建置 swap
例子:
在 /test下建立一个大文档swapdev,作为swap的分区:
使用 mkswap 将 /test/swapdev 这个文件格式化为 swap 的文件格式:
使用命令:mkswap /test/swapdev
同理:需要在开机自动挂载,就需要在:/etc/fstab进行注册。
注意:关闭这个swap分区,使用命令:swapoff 分区名