Linux 磁盘与档案系统管理

硬盘物理组成
就硬盘的物理组件来说,硬盘其实是由许许多多的圆形硬盘盘所组成的, 依据硬盘盘能够容纳的数据量,而有所谓的单碟 (一块硬盘里面只有一个硬盘盘) 或者是多碟 (一块硬盘里面含有多个硬盘盘)的硬盘。在这里我们以单一个硬盘盘来说明,硬盘盘可由底下的图形来示意: 图一、硬盘盘示意图 图二                            184709_abn6_1757002.png
图一、硬盘盘示意图

184728_WZti_1757002.png
图二、磁柱示意图
首先,硬盘里面一定会有所谓的磁头 ( Head ) 在进行该硬盘盘上面的读写动作,而磁头是固定在机械手臂上面的,机械手臂上有多个磁头可以进行读取的动作。 而当磁头固定不动 (假设机械手臂不动) ,硬盘盘转一圈所画出来的圆就是所谓的磁道( Track );而如同我们前面刚刚提到的,一块硬盘里面可能具有多个硬盘盘, 所有硬盘盘上面相同半径的那一个磁道就组成了所谓的磁柱( Cylinder )。 例如上图二所示意,在两个硬盘盘上面的同一个磁道就是一个磁柱啦! 这个磁柱也是磁盘分割( partition )
时的最小单位了; 另外,由圆心向外划直线,则可将磁道再细分为一个一个的扇区( Sector ),这个扇区就是硬盘盘上面的最小储存物理量了! 通常一个 sector 的大小约为 512 Bytes 。以上就是整个硬盘的基本组件。
在计算整个硬盘的储存量时,简单的计算公式就是:Cylinder x Head x Sector x 512 Bytes。另外,硬盘在读取时,主要是『硬盘盘会转动, 利用机械手臂将磁头移动到正确的数据位置(单方向的前后移动),然后将数据依序读出。』 在这个操作的过程当中,由于机械手臂上的磁头与硬盘盘的接触是很细微的空间, 如果有抖动或者是脏污在磁头与硬盘盘之间时,就会造成数据的损毁或者是实体硬盘整个损毁~ 因此,正确的使用计算机的方式,应该是在计算机通电之后,就绝对不要移动主机,并免抖动到硬盘, 而导致整个硬盘数据发生问题啊!另外,也不要随便将插头拔掉就以为是顺利关机! 因为机械手臂必须要归回原位,所以使用操作系统的正常关机方式,才能够有比较好的硬盘保养啊! 因为他会让硬盘的机械手臂归回原位啊!

磁盘分割 ( Partition )
为什么要进行硬盘分割啊?!因为我们必须要告诉操作系统:『 我这块硬盘可以存取的区域是由 A 磁柱到 B 磁柱』,如此一来, 操作系统才能够控制硬盘磁头去 A-B 范围内的磁柱存取数据;如果没有告诉操作系统这个信息, 那么操作系统就无法利用我们的硬盘来进行数据的存取了, 因为操作系统将无法知道他要去哪里读取数据啊!是磁盘分割( Partition )的重点了: 也就是记录每一个分割区( Partition )的起始与结束磁柱!
好了,那么这个分割区的起始与结束磁柱的数据放在哪里呢?!那就是我们在 Linux 安装与多重开机技巧 那个章节提到的 主要开机扇区( Master Boot Recorder, MBR )啰!事实上, MBR 就是在一块硬盘的第零轨上面,这也是计算机开机之后要去利用该硬盘时, 必须要读取的第一个区域!在这个区域内记录的就是硬盘里面的所有分割信息, 以及开机的时候可以进行开机管理程序的写入的处所啊!所以,当一个硬盘的 MBR 坏掉时,由于分割的数据不见了,呵呵,那么这个硬盘也就几乎可以说是寿终正寝了, 因为操作系统不知道该去哪个磁柱上读取数据啊~~
那么 MBR 有什么限制呢?他最大的限制来自于他的大小不够大到储存所有分割与开机管理程序的信息, 因此,MBR 仅提供最多四个 partition 的记忆,这就是所谓的 Primary (P)与 Extended (E) 的 partition 最多只能有四个的原因了。所以说,如果你预计分割超过 4 个 partition 的话,那么势必需要使用 3P + 1E ,并且将所有的剩余空间都拨给 Extended 才行( 记得呦! Extended 最多只能有一个 ),否则只要 3P + E 之后还有剩下的空间, 那么那些容量将成为废物而浪费了,所以结论就是『 如果您要分割硬盘时,并且已经预计规划使用掉 MBR 所提供的 4 个 partition ( 3P + E 或 4P )那么磁盘的全部容量需要使用光,否则剩下的容量也不能再被使用』。 不过,如果您仅是分割出 1P + 1E 的话,那么剩下的空间就还能再分割两个 primary partition !

档案系统
在告知系统我的 partition 所在的起始与结束磁柱之后,再来则是需要将 partition 格式化为『我的操作系统认识的档案系统( Filesystem )』啰!因为每个操作系统认识的 filesystem 并不相同!例如 Windows 操作系统在预设状态下就无法认识 Linux 的档案系统 ( 这里指 Linux 的标准档案系统 ext2 )。所以当
然要针对我们的操作系统来格式化 partition 啰!
当我们在进行磁盘分割( partition )时,每个磁盘分割槽( partition )就是一个档案系统( filesystem ), 而每个档案系统开始的位置的那个 block 就称为 superblock ,superblock 的作用是储存像是档案系统的大小、空的和填满的区块,以及他各自的总数和其它诸如此类的信息等等, 这也就是说,当您要使用这一个磁盘分割槽( 或者说是档案系统 )来进行数据存取的时候,第一个要经过的就是 superblock 这个区块了,所以啰, superblock 坏了,您的这个磁盘槽大概也就回天乏术了!
在 Linux 系统当中,每个档案不止有档案的内容数据,还包括档案的种种属性,例如:所属群组、 所属使用者、能否执行、档案建立时间、档案特殊属性等等。在标准的 ext2 档案系统当中,我们将每个档案的内容分为两个部分来储存,一个是档案的属性,另一个则是档案的内容。为了应付这两个不同的咚咚,所以 ext2 规划出 inode 与 Block 来分别储存档案的属性( 放在 inode 当中 )与档案的内容( 放置在 Block area 当中 )。当我们要将一个 partition 格式化( format )为 ext2 时,就必须要指定 inode 与 Block 的大小才行,也就是说,当 partition 被格式化为 ext2 的档案系统时,他一定会有 inode table 与 block area 这两个区域。
Block 已经在前面说过了,他是数据储存的最小单位。那么 inode 是什么?!简单的说, Block 是记录『档案内容数据』的区域,至于 inode 则是记录『该档案的相关属性,以及档案内容放置在哪一个 Block 之内』的信息。 简单的说, inode 除了记录档案的属性外,同时还必须要具有指向( pointer )的功能,亦即指向档案内容放置的区块之中,好让操作系统可以正确的去取得档案的内容啊!

磁盘与目录的容量
主要的两个指令:
• df
[root@linux ~]# df [-ahikHTm] [目录或文件名]
参数:
-a :列出所有的档案系统,包括系统特有的 /proc 等档案系统;
-k :以 KBytes 的容量显示各档案系统;
-m :以 MBytes 的容量显示各档案系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
范例:
范例一:将系统内所有的 partition 列出来!
[root@linux ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1 5952252 3012332 2632680 54% /
/dev/shm 192836 0 192836 0% /dev/shm
/dev/hda5 9492644 221604 8781060 3% /home
# 特别注意,在 Linux (FC4) 底下,如果 df 没有加任何参数,
# 那么预设会将系统内所有的 (不含特殊内存内的档案系统与 swap) 都以 Kbytes
# 的容量来列出来!至于那个 /dev/shm 是与内存有关的挂载,先不要理他!
范例二:将容量结果以易读的容量格式显示出来
[root@linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 5.7G 2.9G 2.6G 54% /
/dev/shm 189M 0 189M 0% /dev/shm
/dev/hda5 9.1G 217M 8.4G 3% /home
# 不同于范例一,这里会以 G/M 等容量格式显示出来,比较容易看啦!
范例三:将系统内的所有特殊档案格式及名称都列出来
[root@linux ~]# df -aT
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/hda1 ext3 5952252 3012332 2632680 54% /
/dev/proc proc 0 0 0 - /proc
/dev/sys sysfs 0 0 0 - /sys
/dev/devpts devpts 0 0 0 - /dev/pts
/dev/shm tmpfs 192836 0 192836 0% /dev/shm
/dev/hda5 ext3 9492644 221604 8781060 3% /home
none binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc
# 看到了吧!系统里面其实还有很多的特殊档案系统在跑得!
# 不过,那些比较特殊的档案系统几乎都是在内存当中,例如 /proc 这个挂载点。
# 因此,这些特殊的档案系统都不会占据硬盘空间喔! ^_^
范例四:将 /etc 底下的可用的磁盘容量以易读的容量格式显示
[root@linux ~]# df -h /etc
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 5.7G 2.9G 2.6G 54% /
# 这个范例比较有趣一点啦,在 df 后面加上目录或者是档案时, df
# 会自动的分析该目录或档案所在的 partition ,并将该 partition 的容量显示出来,
# 所以,您就可以知道某个目录底下还有多少容量可以使用了! ^_^
范例五:将目前各个 partition 当中可用的 inode 数量列出
[root@linux ~]# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hda1 1.5M 141K 1.4M 10% /
/dev/shm 48K 1 48K 1% /dev/shm
/dev/hda5 2.4M 67 2.4M 1% /home
这是用来显示目前磁盘的总容量与剩余可用容量的指令!需要注意的是, 由于我们的档案或者是外挂的磁盘都是加在『 / 』底下,所以当根目录没有空间的时候, 嘿嘿!你的 Linux 系统可能大概就要挂了吧~
那么来解释一下上面的数据吧!
• Filesystem:代表该档案系统是在那个 partition 啊,所以列出装置名称;
• 1k-blocks:说明底下的数字单位是 1KB 呦!可利用 -h 或 -m 来改变容量;
• Used:顾名思义,就是使用掉的硬盘空间啦!
• Available:也就是剩下的磁盘空间大小;
• Use%:就是磁盘的使用率啦!如果使用率高达 90% 以上时, 最好需要注意一下了,免得容量不足造成系统问题喔! (例如最容易被灌爆的 /var/spool/mail 这个放置邮件的磁盘)
• Mounted on:就是磁盘挂载的目录所在啦!(挂载点啦!)
需要注意的是,如果使用 -a 这个参数时,系统会出现 /proc 这个扇区,但是里面的东西都是 0 ,不要紧张! /proc 的东西都是 Linux 系统所需要加载的系统数据,而且是挂载在『内存当中』的, 所以当然没有占任何的硬盘空间啰!

• du
[root@linux ~]# du [-ahskm] 档案或目录名称
参数:
-a :列出所有的档案与目录容量,因为预设仅统计目录底下的档案量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
范例:
范例一:列出目前目录下的所有档案容量
[root@linux ~]# du
[root@vbird ~]# du
16 ./.gnome2
16 ./.ssh
.......中间省略........
292 .
# 直接输入 du 没有加任何参数时,则 du 会分析『目前所在目录』
# 的档案与目录所占用的硬盘空间。但是,实际显示时,仅会显示目录容量,
# 但我的 . 目录有很多档案没有被列出来,所以,全部的目录相加不会等于 . 的容量喔!
范例二:同范例一,但是将档案的容量也列出来
[root@linux ~]# du -a
12 ./install.log.syslog
16 ./.gnome2
16 ./.ssh
76 ./install.log
16 ./.bash_history
4 ./.bashrc
.......中间省略........
292 .
# 加上这个 -a 参数后,就会将目录底下的档案也一起列示出来,
# 而不是仅列出档案信息而已!注意啰~ ^_^
范例三:检查根目录底下每个目录所占用的容量
[root@linux ~]# du -sm /*
7 /bin
14 /boot
.......中间省略........
385 /proc
.......中间省略........
1 /tmp
2944 /usr
79 /var
# 这是个很常被使用的功能啰~利用万用字符 * 来代表每个目录,
# 所以,如果想要检查某个目录下,那个次目录占用最大的容量,就可以用这个方法找出来
# 值得注意的是,如果您刚刚安装好 Linux 时,那么整个系统容量最大的应该是 /usr
# 那个目录,而 /proc 虽然有列出容量,但是那个容量是在内存中,不占硬盘空间。

连结档的介绍: ln
什么是连结档呢?其实连结档有点类似 Windows 底下的『快捷方式』!也就是很多的连结档案( link file )其实都指向同一个来源档案( source file )!不过,在所有的档案类型当中, 连结档算是比较难理解的一部份了!因为连结档还分成 Hard link 与 symbolic link 两种,要制作连结档就必须要使用 ln 这个指令呢!
[root@linux ~]# ln [-sf] 来源文件 目标文件
参数:
-s :如果 ln 不加任何参数就进行连结,那就是hard link,至于 -s 就是symbolic link
-f :如果 目标文件 存在时,就主动的将目标文件直接移除后再建立!
范例:
范例一:将 /etc/passwd 复制到 /tmp 底下,并且观察 inode 与 block
[root@linux ~]# cd /tmp
[root@linux tmp]# cp -a /etc/passwd .
[root@linux tmp]# du -sb ; df -i .
26948 . <== 先注意一下,这里的容量是多少!
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hda1 1537088 144016 1393072 10% /
# 利用 du 与 df 来检查一下目前的参数~那个 du -sb
# 是计算整个 /tmp 底下有多少 bytes 的容量啦!
范例二:将 /tmp/passwd 制作 hard link 成为 passwd-hd 档案
[root@linux tmp]# ln passwd passwd-hd
[root@linux tmp]# du -sb ; df -i .
26948 .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hda1 1537088 144016 1393072 10% /
# 仔细看,即使多了一个档案在 /tmp 底下,整个 inode 与 block 的容量并没有改变!
[root@linux tmp]# ls -il passwd*
1242760 -rw-r--r-- 2 root root 1746 Jun 29 01:03 passwd
1242760 -rw-r--r-- 2 root root 1746 Jun 29 01:03 passwd-hd
# 原来是指向同一个 inode 啊!这是个重点啊!另外,那个第二栏的连结数也会增加!
范例三:将 /tmp/passwd 建立一个符号连结
[root@linux tmp]# ln -s passwd passwd-so
[root@linux tmp]# ls -li passwd*
1242760 -rw-r--r-- 2 root root 1746 Jun 29 01:03 passwd
1242760 -rw-r--r-- 2 root root 1746 Jun 29 01:03 passwd-hd
1242806 lrwxrwxrwx 1 root root 6 Jul 23 20:02 passwd-so -> passwd
# 仔细看喔,这个 passwd-so 指向的 inode number 不同了!这是一个新的档案~
# 这个档案的内容是指向 passwd 的,你可以看到这个档案的大小,是 6bytes ,
# 怎么来的?因为 passwd 共有六个字符啊!哈哈!没错~这个连结档的内容只是填写
# 连结的目标档案文件名而已!所以,你的连结档档名 (有时候含路径) 有多长,档案就多大!
[root@linux tmp]# du -sb ; df -i .
26954 .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hda1 1537088 144017 1393071 10% /
# 呼呼!整个容量与 inode 使用数都改变啰~确实如此啊!
范例四:删除源文件 passwd ,其它两个档案是否能够开启?
[root@linux tmp]# rm passwd
[root@linux tmp]# cat passwd-hd
......正常显示完毕!
[root@linux tmp]# cat passwd-so
cat: passwd-so: No such file or directory
# 怕了吧?!竟然无法正常的开启这个档案呢~
要注意啰!使用 ln 如果不加任何参数的话,那么就是 Hard Link 啰!如同上面的情况,增加了 hard link 之后,可以发现使用 ls -l 时,显示的 link 那一栏属性增加了!而如果这个时候砍掉 passwd 会发生什么事情呢?呵呵! passwd-hd 的内容还是会跟原来 passwd 相同,但是 passwd-so 就会找不到该档案啦!就是这样!了解了吗?! 而如果 ln 使用 -s 的参数时,就做成差不多是 Windows 底下的『快捷方式』的意思( Symbolic Link,较常用! )。当你修改 Linux 下的 link 档案时,则更动的其实是『原始档』,呵呵, 所以不论你的这个原始档被连结到哪里去,只要你修改了连结档,呵呵!原始档就跟着变啰! 以上面为例,由于你使用 -s 的参数建立一个名为 passwd-so 的档案,则你修改 passwd-so 时,其内容与 passwd 完全相同,并且,当你按下储存之后,被改变的将是 passwd 这个档案! 此外,如果你做了底下这样的连结:
ln -s /bin /root/bin
那么如果你进入 /root/bin 这个目录下,『请注意呦!该目录其实是 /bin 这个目录,因为你做了连结档了!』所以,如果你进入 /root/bin 这个刚刚建立的连结目录, 并且将其中的数据杀掉时,嗯! /bin 里面的数据就通通不见了!这点请千万注意!并不是 /root 底下的资料都是 root 的!还需要注意一下该属
性才行!(其实可以透过 pwd -P 去观察!)

转载于:https://my.oschina.net/u/1757002/blog/869251

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值