鸟哥LINUX操作练习(8):Linux 磁盘与文件系统管理

一、dumpe2fs查看每个区段与 superblock 的信息

[root@www ~]# dumpe2fs [-bh] 装置文件名

选项与参数:

-b :列出保留为坏轨的部分(一般用不到吧!?)

-h :仅列出 superblock 的数据,不会列出其他的区段内容!

范例:找出我的根目录磁盘文件名,并观察文件系统的相关信息

[root@www ~]# df   <==这个命令可以叫出目前挂载的装置

Filesystem    1K-blocks      Used Available Use% Mounted on

/dev/hdc2       9920624   3822848   5585708  41% /        <==就是这个

/dev/hdc3       4956316    141376   4559108   4% /home

/dev/hdc1        101086     11126     84741  12% /boot

tmpfs            371332         0    371332   0% /dev/shm

[root@www ~]# dumpe2fs /dev/hdc2

dumpe2fs 1.39 (29-May-2006)

Filesystem volume name:   /1             <==这个是文件系统的名称(Label)

Filesystem features:      has_journal ext_attr resize_inode dir_index

  filetype needs_recovery sparse_super large_file

Default mount options:    user_xattr acl <==默认挂载的参数

Filesystem state:         clean          <==这个文件系统是没问题的(clean)

Errors behavior:          Continue

Filesystem OS type:       Linux

Inode count:              2560864        <==inode的总数

Block count:              2560359        <==block的总数

Free blocks:              1524760        <==还有多少个 block 可用

Free inodes:              2411225        <==还有多少个 inode 可用

First block:              0

Block size:               4096           <==每个 block 的大小啦!

Filesystem created:       Fri Sep  5 01:49:20 2008

Last mount time:          Mon Sep 22 12:09:30 2008

Last write time:          Mon Sep 22 12:09:30 2008

Last checked:             Fri Sep  5 01:49:20 2008

First inode:              11

Inode size:               128            <==每个 inode 的大小

Journal inode:            8              <==底下这三个与下一小节有关

Journal backup:           inode blocks

Journal size:             128M

Group 0: (Blocks 0-32767) <==第一个 data group 内容, 包含 block 的启始/结束号码

  Primary superblock at 0, Group descriptors at 1-1  <==超级区块在 0 block

  Reserved GDT blocks at 2-626

  Block bitmap at 627 (+627), Inode bitmap at 628 (+628)

  Inode table at 629-1641 (+629)                     <==inode table 所在的 block

  0 free blocks, 32405 free inodes, 2 directories    <==所有 block 都用完了!

  Free blocks:

  Free inodes: 12-32416                              <==剩余未使用的 inode 号码

Group 1: (Blocks 32768-65535)

....(底下省略)....

# 前半部在秀出 supberblock 的内容,包括标头名称(Label)以及inode/block的相关信息

# 后面则是每个 block group 的个别信息了!您可以看到各区段数据所在的号码!

# 也就是说,基本上所有的数据还是与 block 的号码有关就是了!很重要!

最底下是关于日志信息:
Journal inode: 8    Journal backup: inode blocks     Journal size: 128M

利用 dumpe2fs 可以查询到非常多的信息,不过依内容主要可以区分为上半部是 superblock 内容, 下半部则是每个 block group 的信息

二、df与du:解决如何查询整体文件系统的总容量与每个目录所占用的容量问题

1、df:列出文件系统的整体磁盘使用量,读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在 Superblock 内的信息。

[root@www ~]# df [-ahikHTm] [目录或文件名]

选项与参数:

-a  :列出所有的文件系统,包括系统特有的 /proc 等文件系统;

-k  :以 KBytes 的容量显示各文件系统;

-m  :以 MBytes 的容量显示各文件系统;

-h  :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;

-H  :以 M=1000K 取代 M=1024K 的进位方式;

-T  :连同该 partition filesystem 名称 (例如 ext3) 也列出;

-i  :不用硬盘容量,而以 inode 的数量来显示

范例一:将系统内所有的 filesystem 列出来!

[root@www ~]# df

Filesystem      1K-blocks      Used Available Use% Mounted on

/dev/hdc2         9920624   3823112   5585444  41% /

/dev/hdc3         4956316    141376   4559108   4% /home

/dev/hdc1          101086     11126     84741  12% /boot

tmpfs              371332         0    371332   0% /dev/shm

# Linux 底下如果 df 没有加任何选项,那么默认会将系统内所有的

# (不含特殊内存内的文件系统与 swap) 都以 1 Kbytes 的容量来列出来!

# 至于那个 /dev/shm 是与内存有关的挂载,先不要理他!

输出的结果信息为:

  • Filesystem:代表该文件系统是在哪个 partition ,所以列出装置名称;
  • 1k-blocks:说明底下的数字单位是 1KB ,可利用 -h 或 -m 来改变容量;
  • Used:顾名思义,就是使用掉的硬盘空间啦!
  • Available:也就是剩下的磁盘空间大小;
  • Use%:就是磁盘的使用率啦!如果使用率高达 90% 以上时, 最好需要注意一下了,免得容量不足造成系统问题喔!(例如最容易被灌爆的 /var/spool/mail 这个放置邮件的磁盘)
  • Mounted on:就是磁盘挂载的目录所在

范例二:将容量结果以易读的容量格式显示出来

[root@www ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/hdc2             9.5G  3.7G  5.4G  41% /

/dev/hdc3             4.8G  139M  4.4G   4% /home

/dev/hdc1              99M   11M   83M  12% /boot

tmpfs                 363M     0  363M   0% /dev/shm

# 不同于范例一,这里会以 G/M 等容量格式显示出来,比较容易看啦!

范例三:将系统内的所有特殊文件格式及名称都列出来

[root@www ~]# df -aT

Filesystem    Type 1K-blocks    Used Available Use% Mounted on

/dev/hdc2     ext3   9920624 3823112   5585444  41% /

proc          proc         0       0         0   -  /proc

sysfs        sysfs         0       0         0   -  /sys

devpts      devpts         0       0         0   -  /dev/pts

/dev/hdc3     ext3   4956316  141376   4559108   4% /home

/dev/hdc1     ext3    101086   11126     84741  12% /boot

tmpfs        tmpfs    371332       0    371332   0% /dev/shm

none   binfmt_misc         0       0         0   -  /proc/sys/fs/binfmt_misc

sunrpc  rpc_pipefs         0       0         0   -  /var/lib/nfs/rpc_pipefs

# 系统里面其实还有很多特殊的文件系统存在的。那些比较特殊的文件系统几乎

# 都是在内存当中,例如 /proc 这个挂载点。因此,这些特殊的文件系统都不会占据硬盘空间

范例四:将 /etc 底下的可用的磁盘容量以易读的容量格式显示

[root@www ~]# df -h /etc

Filesystem            Size  Used Avail Use% Mounted on

/dev/hdc2             9.5G  3.7G  5.4G  41% /

# 这个范例比较有趣一点啦,在 df 后面加上目录或者是文件时, df

#会自动的分析该目录或文件所在的 partition ,并将该 partition 的容量显示出来,

# 所以,您就可以知道某个目录底下还有多少容量可以使用了

范例五:将目前各个 partition 当中可用的 inode 数量列出

[root@www ~]# df -ih

Filesystem            Inodes   IUsed   IFree IUse% Mounted on

/dev/hdc2               2.5M    147K    2.3M    6% /

/dev/hdc3               1.3M      46    1.3M    1% /home

/dev/hdc1                26K      34     26K    1% /boot

tmpfs                    91K       1     91K    1% /dev/shm

# 这个范例则主要列出可用的 inode 剩余量与总容量。分析一下与范例一的关系,

# 你可以清楚的发现到,通常 inode 的数量剩余都比 block 还要多呢

2、du:直接到文件系统内去搜寻所有的文件数据,运行较慢

[root@www ~]# du [-ahskm] 文件或目录名称

选项与参数:

-a  :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。

-h  :以人们较易读的容量格式 (G/M) 显示;

-s  :列出总量而已,而不列出每个各别的目录占用容量;

-S  :不包括子目录下的总计,与 -s 有点差别。

-k  :以 KBytes 列出容量显示;

-m  :以 MBytes 列出容量显示;

范例一:列出目前目录下的所有文件容量

[root@www ~]# du

8       ./test4     <==每个目录都会列出来

8       ./test2

....中间省略....

12      ./.gconfd   <==包括隐藏文件的目录

220     .           <==这个目录(.)所占用的总量

# 直接输入 du 没有加任何选项时,则 du 会分析『目前所在目录』

# 的文件与目录所占用的硬盘空间。但是,实际显示时,仅会显示目录容量(不含文件)

# 因此 . 目录有很多文件没有被列出来,所以全部的目录相加不会等于 . 的容量喔!

# 此外,输出的数值数据为 1K 大小的容量单位。

范例二:同范例一,但是将文件的容量也列出来

[root@www ~]# du -a

12      ./install.log.syslog   <==有文件的列表了

8       ./.bash_logout

8       ./test4

8       ./test2

....中间省略....

12      ./.gconfd

220     .

范例三:检查根目录底下每个目录所占用的容量

[root@www ~]# du -sm /*

7       /bin

6       /boot

.....中间省略....

0       /proc

.....中间省略....

1       /tmp

3859    /usr     <==系统初期最大就是他了啦!

77      /var

# 这是个很常被使用的功能~利用通配符 * 来代表每个目录,

# 如果想要检查某个目录下,哪个次目录占用最大的容量,可以用这个方法找出来

# 值得注意的是,如果刚刚安装好 Linux 时,那么整个系统容量最大的应该是 /usr

# /proc 虽然有列出容量,但是那个容量是在内存中,不占硬盘空间。

三、目录的inod和block信息

1、观察 root 根目录内的文件所占用的 inode 号码时,可以使用 ls -i 这个选项来处理

[root@www ~]# ls -li

total 92

654683 -rw------- 1 root root  1474 Sep  4 18:27 anaconda-ks.cfg

648322 -rw-r--r-- 1 root root 42304 Sep  4 18:26 install.log

648323 -rw-r--r-- 1 root root  5661 Sep  4 18:25 install.log.syslog

2、查看block数

[root@www ~]# ll -d / /bin /boot /proc /lost+found /sbin

drwxr-xr-x 23 root root  4096 Sep 22 12:09 /           <==一个 4K block

drwxr-xr-x  2 root root  4096 Sep 24 00:07 /bin        <==一个 4K block

drwxr-xr-x  4 root root  1024 Sep  4 18:06 /boot       <==一个 1K block

drwx------  2 root root 16384 Sep  5 01:49 /lost+found <==四个 4K block

dr-xr-xr-x 96 root root     0 Sep 22 20:07 /proc       <==此目录不占硬盘空间

#/proc 的东西都是 Linux 系统所需要加载的系统数据,而且是挂载在『内存当中』的,

所以当然没有占任何的硬盘空间

drwxr-xr-x  2 root root 12288 Sep  5 12:33 /sbin       <==三个 4K block

3、系统是如何读取 /etc/passwd 这个文件?

[root@www ~]# ll -di / /etc /etc/passwd

      2 drwxr-xr-x  23 root root  4096 Sep 22 12:09 /

1912545 drwxr-xr-x 105 root root 12288 Oct 14 04:02 /etc

1914888 -rw-r--r--   1 root root  1945 Sep 29 02:21 /etc/passwd

(1)/ 的 inode:
透过挂载点的信息找到 /dev/hdc2 的 inode 号码为 2 的根目录 inode,且 inode 规范的权限让我们可以读取该 block 的内容(有 r 与 x) ;
(2)/ 的 block:经过上个步骤取得 block 的号码,并找到该内容有 etc/ 目录的 inode 号码 (1912545); 
(3)etc/ 的 inode:读取 1912545 号 inode 得知 vbird 具有 r 与 x 的权限,因此可以读取 etc/ 的 block 内容; 
(4)etc/ 的 block:经过上个步骤取得 block 号码,并找到该内容有 passwd 文件的 inode 号码 (1914888); 
(5)passwd 的 inode:读取 1914888 号 inode 得知 vbird 具有 r 的权限,因此可以读取 passwd 的 block 内容; 
(6)passwd 的 block:最后将该 block 内容的数据读出来。

4、目录挂载点

[root@www ~]# ls -lid / /boot /home

2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 /

2 drwxr-xr-x  4 root root 1024 Sep  4 18:06 /boot

2 drwxr-xr-x  6 root root 4096 Sep 29 02:21 /home

# /, /boot, /home 为三个不同的 filesystem 

[root@www ~]# ls -ild /  /.  /..

2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 /

2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 /.

2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 /..

#三个文件 (/, /., /..) 均在同一个 filesystem 内,而这三个文件的 inode 号码均为 2 号,因此这三个文档名都指向同一个 inode 号码,当然这三个文件的内容也就完全一模一样了

5、Linux 支持的文件系统有哪些

[root@www ~]# ls -l /lib/modules/$(uname -r)/kernel/fs

6、系统目前已加载到内存中支持的文件系统则有:

[root@www ~]# cat /proc/filesystems

四、实体链接与符号链接:LN

1、[root@www ~]# ln /etc/crontab .   <==创建实体链接的命令

[root@www ~]# ll -i /etc/crontab /root/crontab

1912701 -rw-r--r-- 2 root root 255 Jan  6  2007 /etc/crontab

1912701 -rw-r--r-- 2 root root 255 Jan  6  2007 /root/crontab

[root@www ~]# ln -s /etc/crontab crontab2

2、[root@www ~]# ll -i /etc/crontab /root/crontab2

1912701 -rw-r--r-- 2 root root 255 Jan  6  2007 /etc/crontab

 654687 lrwxrwxrwx 1 root root  12 Oct 22 13:58 /root/crontab2 -> /etc/crontab

3、[root@www ~]# ln [-sf] 来源文件 目标文件

选项与参数:

-s  :如果不加任何参数就进行连结,那就是hard link,至于 -s 就是symbolic link

-f  :如果 目标文件 存在时,就主动的将目标文件直接移除后再创建!

范例一:将 /etc/passwd 复制到 /tmp 底下,并且观察 inode 与 block

[root@www ~]# cd /tmp

[root@www tmp]# cp -a /etc/passwd .

[root@www tmp]# du -sb ; df -i .

18340   .  <==先注意一下这里的容量是多少!

Filesystem            Inodes   IUsed   IFree IUse% Mounted on

/dev/hdc2            2560864  149738 2411126    6% /

# 利用 du df 来检查一下目前的参数~那个 du -sb

# 是计算整个 /tmp 底下有多少 bytes 的容量啦!

范例二:将 /tmp/passwd 制作 hard link 成为 passwd-hd 文件,并观察文件与容量

[root@www tmp]# ln passwd passwd-hd

[root@www tmp]# du -sb ; df -i .

18340   .

Filesystem            Inodes   IUsed   IFree IUse% Mounted on

/dev/hdc2            2560864  149738 2411126    6% /

# 仔细看,即使多了一个文件在 /tmp 底下,整个 inode block 的容量并没有改变!

[root@www tmp]# ls -il passwd*

586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd

586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd-hd

# 原来是指向同一个 inode 啊!这是个重点啊!另外,那个第二栏的连结数也会添加!

范例三:将 /tmp/passwd 创建一个符号链接

[root@www tmp]# ln -s passwd passwd-so

[root@www tmp]# ls -li passwd*

586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd

586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd-hd

586401 lrwxrwxrwx 1 root root    6 Oct 22 14:18 passwd-so -> passwd

# passwd-so 指向的 inode number 不同了!这是一个新的文件~这个文件的内容是指向

# passwd 的。passwd-so 的大小是 6bytes ,因为 passwd 共有六个字符之故

[root@www tmp]# du -sb ; df -i .

18346   .

Filesystem            Inodes   IUsed   IFree IUse% Mounted on

/dev/hdc2            2560864  149739 2411125    6% /

# 呼呼!整个容量与 inode 使用数都改变啰~确实如此啊!

范例四:删除源文件 passwd ,其他两个文件是否能够开启?

[root@www tmp]# rm passwd

[root@www tmp]# cat passwd-hd

......正常显示完毕!

[root@www tmp]# cat passwd-so

cat: passwd-so: No such file or directory

[root@www tmp]# ll passwd*

-rw-r--r-- 1 root root 1945 Sep 29 02:21 passwd-hd

lrwxrwxrwx 1 root root    6 Oct 22 14:18 passwd-so -> passwd

# 怕了吧!符号链接果然无法开启!另外,如果符号链接的目标文件不存在,

# 其实档名的部分就会有特殊的颜色显示喔!

[root@www ~]# ls -ld /tmp

drwxrwxrwt 5 root root 4096 Oct 22 14:22 /tmp

[root@www ~]# mkdir /tmp/testing1

[root@www ~]# ls -ld /tmp

drwxrwxrwt 6 root root 4096 Oct 22 14:37 /tmp

[root@www ~]# ls -ld /tmp/testing1

drwxr-xr-x 2 root root 4096 Oct 22 14:37 /tmp/testing1

五、磁盘挂载与卸除

[root@www ~]# mount -a

[root@www ~]# mount [-l]

[root@www ~]# mount [-t 文件系统] [-L Label名] [-o 额外选项] \

 [-n]  装置文件名  挂载点

选项与参数:

-a  :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来

-l  :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!

-t  :与 mkfs 的选项非常类似的,可以加上文件系统种类来指定欲挂载的类型。

      常见的 Linux 支持类型有:ext2, ext3, vfat, reiserfs, iso9660(光盘格式),

      nfs, cifs, smbfs(此三种为网络文件系统类型)

-n  :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序

      的运行。但在某些情况下(例如单人维护模式)为了避免问题,会刻意不写入。

      此时就得要使用这个 -n 的选项了。

-L  :系统除了利用装置文件名 (例如 /dev/hdc6) 之外,还可以利用文件系统的标头名称

      (Label)来进行挂载。最好为你的文件系统取一个独一无二的名称吧!

-o  :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等:

      ro, rw:       挂载文件系统成为只读(ro) 或可擦写(rw)

      async, sync:  此文件系统是否使用同步写入 (sync) 或异步 (async)

                    内存机制,请参考文件系统运行方式。默认为 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:      重新挂载,这在系统出错,或重新升级参数时,很有用!

1、挂载Ext2/Ext3文件系统

范例一:用默认的方式,将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面!

[root@www ~]# mkdir /mnt/hdc6

[root@www ~]# mount /dev/hdc6 /mnt/hdc6

[root@www ~]# df

Filesystem           1K-blocks      Used Available Use% Mounted on

.....中间省略.....

/dev/hdc6              1976312     42072   1833836   3% /mnt/hdc6

# 看起来,真的有挂载!且文件大小约为 2GB 左右啦!

范例二:观察目前『已挂载』的文件系统,包含各文件系统的Label名称

[root@www ~]# mount -l

/dev/hdc2 on / type ext3 (rw) [/1]

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/hdc3 on /home type ext3 (rw) [/home]

/dev/hdc1 on /boot type ext3 (rw) [/boot]

tmpfs on /dev/shm type tmpfs (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

/dev/hdc6 on /mnt/hdc6 type ext3 (rw) [vbird_logical]

# 除了实际的文件系统外,很多特殊的文件系统(proc/sysfs...)也会被显示出来!

# 值得注意的是,加上 -l 选项可以列出如上特殊字体的标头(label)

 

2、挂载 CD 或 DVD 光盘

范例三:将你用来安装 Linux 的 CentOS 原版光盘拿出来挂载!

[root@www ~]# mkdir /media/cdrom

[root@www ~]# mount -t iso9660 /dev/cdrom /media/cdrom

[root@www ~]# mount /dev/cdrom /media/cdrom

# 你可以指定 -t iso9660 这个光盘片的格式来挂载,也可以让系统自己去测试挂载!

# 所以上述的命令只要做一个就够了!但是目录的创建初次挂载时必须要进行喔!

 [root@www ~]# df

Filesystem           1K-blocks      Used Available Use% Mounted on

.....中间省略.....

/dev/hdd               4493152   4493152         0 100% /media/cdrom

# 因为我的光驱使用的是 /dev/hdd IDE 接口之故!

3、格式化与挂载软盘

范例四:格式化后挂载软盘到 /media/floppy/ 目录中。

[root@www ~]# mkfs -t vfat /dev/fd0

# 我们格式化软盘成为 Windows/Linux 可共同使用的 FAT 格式吧!

[root@www ~]# mkdir /media/floppy

[root@www ~]# mount -t vfat /dev/fd0 /media/floppy

[root@www ~]# df

Filesystem           1K-blocks      Used Available Use% Mounted on

.....中间省略.....

/dev/fd0                  1424       164      1260  12% /media/floppy

4、挂载闪盘

范例五:找出你的闪盘装置文件名,并挂载到 /mnt/flash 目录中

[root@www ~]# fdisk -l

.....中间省略.....

Disk /dev/sda: 8313 MB, 8313110528 bytes

59 heads, 58 sectors/track, 4744 cylinders

Units = cylinders of 3422 * 512 = 1752064 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1               1        4745     8118260    b  W95 FAT32

# 从上的特殊字体,可得知磁盘的大小以及装置文件名,知道是 /dev/sda1

[root@www ~]# mkdir /mnt/flash

[root@www ~]# mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash

[root@www ~]# df        

Filesystem           1K-blocks      Used Available Use% Mounted on

.....中间省略.....

/dev/sda1              8102416   4986228   3116188  62% /mnt/flash

5、重新挂载根目录与挂载不特定目录

范例六:将 / 重新挂载,并加入参数为 rw 与 auto

[root@www ~]# mount -o remount,rw,auto /

范例七:将 /home 这个目录暂时挂载到 /mnt/home 底下:

[root@www ~]# mkdir /mnt/home

[root@www ~]# mount --bind /home /mnt/home

你可能感兴趣的:(鸟哥LINUX操作练习(8):Linux 磁盘与文件系统管理)