Linux 的磁盘挂载等特色,以及文件系统 (filesystem) 的介绍
本文数据主要针对 Fedora Core 4 的系统进行说明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而来, 这个 Red Hat Linux 9 并不是当前大家听到的 RHEL 喔!那是在 RHEL 出现之前的产品,基本上是在 2003 年以前的作品了!Fedora Core 4 则是在 2005 年 6 月份发布,使用的内核是 2.6.11 版,当时是很红的一个作品!只是生命周期太短,所以用这个 Fedora 系列来介绍 Server, 当时的决定确实有点莫名其妙了...
建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 Fedora Core 4 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
我们在前面的文件权限介绍的章节当中,提到很多的权限与属性的观念,那么接下来要了解的是, 这些属性是记录在硬盘的那个地方?这里就要特别了解到 Linux 文件系统( filesystem )是如何记录文件, 与文件是如何被读取的啰!而要了解整个文件系统的观念,就不能不知道硬盘的组成组件! 所以,在这个章节当中,我们由最基础的硬盘组成组件介绍起,并介绍 inode 与链接档等基本知识, 以及如何利用开机即可挂载的方式来使我们的各个 partition 可以在开机时就已经进行好挂载的动作喔!
[root@linux ~]# ls -la --time=atime PATH
那个 PATH 是您所想要查找的文件或目录名称。利用上面的 ls
相关参数,就可以取得您想要知道的文件相关的三种时间啰~
至于一个 inode 的大小为 128 bytes 这么大 (可以使用底下要介绍的
dumpe2fs 来查阅 inode 的大小喔!) !好了,那么我的
Linux 系统到底是如何读取一个文件的内容呢?底下我们分别针对目录与文件来说明:1. 察看一下根目录所记载的所有文件关连性数据 [root@linux ~]# ls -lia / 2 drwxr-xr-x 24 root root 4096 Jul 16 23:45 . 2 drwxr-xr-x 24 root root 4096 Jul 16 23:45 .. 719489 drwxr-xr-x 83 root root 12288 Jul 21 04:02 etc 523265 drwxr-xr-x 24 root root 4096 Jun 25 20:16 var # 注意看一下,在上面的 . 与 .. 都是链接到 inode 号码为 2 的那个 inode , # 也就是说, / 与其上层目录 .. 都是指向同一个 inode number 啊!两者是相同的。 # 而在根目录所记载的文件关连性 (在 block 内) 得到 /etc 的 inode number # 为 719489 那个 inode number 喔! 2. 察看一下 /etc/ 内的文件关连性的数据 [root@linux ~]# ls -liad /etc/crontab /etc/. 719489 drwxr-xr-x 83 root root 12288 Jul 21 04:02 /etc/. 723496 -rw-r--r-- 1 root root 663 Jul 4 12:03 /etc/crontab # 瞧!此时就能够将 /etc/crontab 找到关连性啰!所以您知道,目录的最大功能就是在提供文件的关连性,在关连性里面, 当然最主要的就是『文件名与 inode 的对应数据』啰!另外,关于 EXT2 文件系统,这里有几点小事情要提醒一下:
[root@linux ~]# dumpe2fs /dev/hda1 Filesystem volume name: / Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 1537088 Block count: 1536207 Free blocks: 735609 Free inodes: 1393089 First block: 0 Block size: 4096 Filesystem created: Sat Jun 25 16:21:13 2005 Last mount time: Sat Jul 16 23:45:04 2005 Last write time: Sat Jul 16 23:45:04 2005 Last checked: Sat Jun 25 16:21:13 2005 First inode: 11 Inode size: 128 Journal inode: 8 Group 0: (Blocks 0-32767) Primary superblock at 0, Group descriptors at 1-1 Reserved GDT blocks at 2-376 Block bitmap at 377 (+377), Inode bitmap at 378 (+378) Inode table at 379-1400 (+379) 0 free blocks, 32424 free inodes, 11 directories Free blocks: Free inodes: 281-32704 Group 1: (Blocks 32768-65535) Backup superblock at 32768, Group descriptors at 32769-32769 Reserved GDT blocks at 32770-33144 Block bitmap at 33145 (+377), Inode bitmap at 33146 (+378) Inode table at 33147-34168 (+379) 18 free blocks, 24394 free inodes, 349 directories Free blocks: 37882-37886, 38263-38275 Free inodes: 38084-38147, 39283-39343, 41135, 41141-65408 # 因为数据很多,所以鸟哥略去了一些信息了~上面是比较精简的显示内容。 # 在 Group 0 之前的都是 Superblock 的内容,记录了 inode/block 的总数, # 还有其他相关的消息。至于由 Group 0 之后,则是说明各个 bitmap 及 inode table # 与 block area 等等。通过这些记录,我们可以很轻易的就知道哪些 inode 没有被使用,哪些 block 还可以记录, 如此一来,在添加、创建文件与目录时,系统就会根据这些记录来将数据分别写入尚未被使用的 inode 与 block area 了! 不过,要注意的是,当我们添加一个文件(目录)时:
[root@linux ~]# ls -lid / /home 2 drwxr-xr-x 26 root root 4096 7月 21 09:08 / 2 drwxr-xr-x 42 root root 4096 7月 14 23:37 /home看到了吧?咦!怎么 / 与 /home 的 inode number 都是 2 啊??这太不合理了~ 原因很简单啊!因为 / 是 /dev/hda1 而 /home 是 /dev/hda2 ,这两个 partition 都有 inode number 为 2 的号码啊!所以啊,请注意, 挂载点一定是『目录』而不是文件喔! 也就是说,这个挂载点就是进入该 filesystem 的入口啦!
[root@linux ~]# ls -l /lib/modules/`uname -r`/kernel/fs
系统目前已激活的文件系统则有:
[root@linux ~]# cat /proc/filesystems
假设您的 / 使用的是 /dev/hda1 ,用 ext3 ,而 /home 使用 /dev/hda2 ,用 reiserfs ,
那么您取用 /home/dmtsai/.bashrc 时,有特别指定要用的什么文件系统的模块来读取吗?!
应该是没有吧!嘿嘿!这个就是我们 Linux kernel 的 Virtual Filesystem Switch (VFS)
的功能啦!通过这个 VFS 的功能来管理所有的 filesystem,
省去我们需要自行设置读取文件系统的定义啊~方便很多!
[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 系统可能大概就要挂了吧~当然啰!你可以将你的数据放置在加挂的硬盘中, 那么如何知道目前哪一个磁盘还有多少空间呢?!
[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 虽然有列出容量,但是那个容量是在内存中,不占硬盘空间。在 Windows 底下可以使用文件总管来管理你的磁盘,在 Linux 底下也可以轻易的以 du 来知道目前磁盘的文件容量耶!在缺省的情况下,容量的输出是以 KB 来设计的, 如果你想要知道目录占了多少 MB ,那么就使用 -m 这个参数即可啰!而, 如果你只想要知道该目录占了多少容量的话,呵呵,使用 -s 就可以啦!另外, 如同上面的范例三,可以利用通配符 * 来加快你的搜索喔!
[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 # 怕了吧?!竟然无法正常的打开这个文件呢~
[root@linux ~]# ls -ld /tmp drwxrwxrwt 5 root root 4096 Oct 11 05:15 /tmp [root@linux ~]# mkdir /tmp/testing1 [root@linux ~]# ls -ld /tmp drwxrwxrwt 6 root root 4096 Oct 11 13:58 /tmp [root@linux ~]# ls -ld /tmp/testing1 drwxr-xr-x 2 root root 4096 Oct 11 13:58 /tmp/testing1瞧!原本的所谓上层目录 /tmp 的 link 数量由 5 增加为 6 ,至于新目录 /tmp/testing 则为 2 ,这样可以理解目录的 link 数量的意义了吗?! ^_^
[root@linux ~]# fdisk [-l] 设备名称 参数: -l :输出后面接的设备所有的 partition 内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜索到的设备的 partition 均列出来。 范例: 范例:查阅您的第一颗硬盘内的相关信息 [root@linux ~]# fdisk /dev/hda <== 仔细看,不要加上数字喔! The number of cylinders for this disk is set to 2494. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) # 在你进入 fdisk 这支程序的工作画面后,如果您的硬盘太大的话,就会出现如上消息。 # 这个消息仅是在告知你,因为某些旧版的软件与操作系统并无法支持大于 1024 # 磁柱 (cylinter) 后的磁区使用,不过我们 Linux 是没问题啦! 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 l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes 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) # 这里注意一下,使用 fdisk 这支程序是完全不需要背指令的,因为按下 m 之后, # 立刻就会有一堆指令说明跑出来了!在上面的指令当中,比较重要的有: # d 删除一个磁盘分区、 n 添加一个磁盘分区、 p 将目前的磁盘分区列出来、 # q 不保存离开!这个重要! w 写入磁盘分割表后离开!这个危险! Command (m for help): p <== 这里可以输出目前磁盘的状态 Disk /dev/hda: 20.5 GB, 20520493056 bytes <== 硬盘的信息在这底下三行 255 heads, 63 sectors/track, 2494 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 83 Linux /dev/hda2 766 1147 3068415 83 Linux /dev/hda3 1148 1274 1020127+ 82 Linux swap /dev/hda4 1275 2494 9799650 5 Extended /dev/hda5 1275 2494 9799618+ 83 Linux # 由上面的信息,您可以知道,我的硬盘是 20GB 的,而 Head/Sector/Cylinder # 的数量为 255/63/2494 ,另外,可以看到上头的 Boot 吗?那个地方代表有开机信息的 # partition !另外,那个 start 与 end 则是指每一个 partition 的开始与结束的 # Cylinder 号码!这样可以了解我们前面一直强调的, partition 最小单位为 cylinder # 此外,上头显示的那个 Id 为主要文件格式的代号,你可以按下 l ( L 的小写 ) # 就可以知道我们 linux 的 fdisk 认识多少文件系统啰! ^_^ # 至于 Blocks 则以 KBytes 来显示该 partition 的容量的 Command (m for help): q # 想要不保存离开吗?按下 q 就对了!不要随便按 w 啊! 范例:查阅目前系统内的所有 partition 有哪些? [root@linux ~]# fdisk -l Disk /dev/hda: 20.5 GB, 20520493056 bytes 255 heads, 63 sectors/track, 2494 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 83 Linux /dev/hda2 766 1147 3068415 83 Linux /dev/hda3 1148 1274 1020127+ 82 Linux swap /dev/hda4 1275 2494 9799650 5 Extended /dev/hda5 1275 2494 9799618+ 83 Linux Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdb1 * 1 3633 29182041 83 Linux # 由于我的这个系统有两颗硬盘,下达 fdisk -l 的话,所有的 partition 都看到了! # 另外,我可以确定我的 /dev/hdb 还有剩余空间喔!因为由上面的信息看来, # 我的 /dev/hdb 的磁柱应该可以到 3736 ,但是目前只用到 3633 ,所以, # 就肯定还有剩余空间拉!等一下我们就用这个来测试啰!还记得我们刚刚在 认识 EXT2 文件系统 里面提到的 partition 部分内容吗?其实 fdisk 最主要的工作就是在修改『 partition table 』 而已,并没有实际的将硬盘切切割割的啦!他会定义出某一个 partition 是由 n1 磁柱到 n2 磁柱之间这样的信息!因此,如果硬盘分割错误时,只要在 format 之前将 partition tables 复原,那么就可以将硬盘原来的数据救回来啰!所以,一个好的管理员,有时候也会将自己的 partition table 记录下来,以备不时之需呀!
[root@linux ~]# fdisk /dev/hdb 1. 先看看整个结果是如何~ Command (m for help): p Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdb1 * 1 3633 29182041 83 Linux 2. 按下 d 给他删除吧! Command (m for help): d Selected partition 1 # 因为我们这个磁盘仅有 1 个 partition ,所以系统会自动帮我们~ Command (m for help): p Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System # 『看』不见了! partition 就这样不见了! Command (m for help): q # 鸟哥这里仅是做一个练习而已,所以,按下 q 就能够离开啰~
[root@linux ~]# fdisk /dev/hdb Command (m for help): n Command action e extended p primary partition (1-4) p <==就是这里!可以自行决定是 p 还是 e 喔! Partition number (1-4): 4 <==编号可以随意! First cylinder (3634-3736, default 3634): <==这里按下 Enter 就会使用默认值 Using default value 3634 Last cylinder or +size or +sizeM or +sizeK (3634-3736, default 3736): +100M # 这个地方有趣了!我们知道 partition 是由 n1 到 n2 的磁柱 (cylinder), # 但是我们对于磁柱的大小不容易掌握!这个时候可以填入 +100M 来让系统自动帮我们找出 # 『最接近 100M 的那个 cylinder 号码』!因为不可能刚好等于 100MBytes 啦! Command (m for help): p Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdb1 * 1 3633 29182041 83 Linux /dev/hdb4 3634 3646 104422+ 83 Linux # 这个就是刚刚创建起来的 primary partition 啰!再继续吧! Command (m for help): n Command action e extended p primary partition (1-4) e Partition number (1-4): 2 First cylinder (3647-3736, default 3647): <==这里按下 Enter 就会使用默认值 Using default value 3647 Last cylinder or +size or +sizeM or +sizeK (3647-3736, default 3736): <==Enter Using default value 3736 Command (m for help): p Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdb1 * 1 3633 29182041 83 Linux /dev/hdb2 3647 3736 722925 5 Extended /dev/hdb4 3634 3646 104422+ 83 Linux # 仔细看,我们说过, 1-4 号是磁盘保留的号码,所以这个号码可以随意设置, # 不一定要由 1 开始呢!但是,等一下做的 logical 就一定是由 5 开始累加了! Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l <== 使用的是 logical 的 partition 喔! First cylinder (3647-3736, default 3647):<==Enter Using default value 3647 Last cylinder or +size or +sizeM or +sizeK (3647-3736, default 3736):<==Enter Using default value 3736 Command (m for help): p Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdb1 * 1 3633 29182041 83 Linux /dev/hdb2 3647 3736 722925 5 Extended /dev/hdb4 3634 3646 104422+ 83 Linux /dev/hdb5 3647 3736 722893+ 83 Linux # 这可就 OK 啰~虽然新作出三个 partition ,不过仅有 /dev/hdb4 与 # /dev/hdb5 可以用啊! Command (m for help): w The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks. # 有的时候,磁盘分割表变动之后,得要重新开机,有的则不需要~ # 上面的消息告诉我们,需要重新开机呢!那就 reboot 吧!通过上面的例子,您可以清楚的看到,呵呵!第一个 logical 是在 5 号呦!OK!在 fdisk 完成之后,请记得使用 mke2fs 格式化啰!另外,请注意,如果过程中进行错误时, 那么赶紧按下 q 离开即可!
[root@linux ~]# mke2fs [-bicLj] 设备名称 参数: -b :可以设置每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种; -i :多少容量给予一个 inode 呢? -c :检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试; 如果下达两次 -c -c 的话,会测试读写(read-write),会很慢~ -L :后面可以接表头名称 (Label),这个 label 是有用的喔!后面会讲~ -j :本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3。 范例: 范例一:将刚刚创建的 /dev/hdb5 格式化成为 ext3 吧!且名称为 logical [root@linux ~]# mke2fs -j -L "logical" /dev/hdb5 mke2fs 1.37 (21-Mar-2005) Filesystem label=logical OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 90432 inodes, 180723 blocks 9036 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=188743680 6 block groups 32768 blocks per group, 32768 fragments per group 15072 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840 Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 27 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # 这样子就能够将我们的系统给他创建起来啰~ 范例二:承上题,如果将 block 改为 2048 ,且 inode 改为 4096? [root@linux ~]# mke2fs -j -L "logical" -b 2048 -i 4096 /dev/hdb5 # 呈现出来的结果大致与范例一相似~不过就是 block 大小与 inode 数量会改变!这是用来将磁盘格式化成 Linux 系统档的指令。基本上,只要写入对的设备文件就可以了。 例如我们要格式化软碟的话,或是新的硬盘 /dev/hda5 等等! 这个指令通常是在新的硬盘上面切割完之后,再加以格式化的!另外,如果要将旧的磁区格式化成 ext2 格式的话,就使用这个指令吧!进行当中显示的消息有点像上面的最后几行, 系统会显示目前的格式化的默认值!
[root@linux ~]# mkbootdisk --device /dev/fd0 `uname -r`
这是制作开机磁片的指令,其中,『 `uname -r` 』是目前 Linux 系统所使用的内核版本,
如果你有多个内核版本的话,你可以直接输入内核版本。例如在鸟哥的系统中,
旧的内核还是有保留的,所以我都会至少有两个内核,在我管理的某部主机中,内核为
2.6.11-1.1369_FC4 及 2.6.12-1.1398_FC4 ,那么如果我要直接以 2.6.11-1.1369_FC4
来开机的话,就可以使用:
[root@linux ~]# fdformat /dev/fd0H1440
这是用来『低级格式化』软碟的指令。( 注意:软碟的设备档为 /dev/fd0 )!在上面的设备文件为
/dev/fd0H1440 , 其中加在 /fd0 之后的 H1440 为表示 1.44MB 的软碟容量!
在低级格式化之后,还要将软碟的文件格式化为 Linux 的 ext2 之型态,则需要使用
mke2fs 指令!
[root@linux ~]# fsck [-AtCary] 设备名称 参数: -t :fsck 可以检查好几种不同的 filesystem ,而 fsck 只是一支综合程序而已。 个别的 filesystem 的检验程序都在 /sbin 底下,您可以使用 ls -l /sbin/fsck* 去检查看看,就知道有几种 filesystem 啰。缺省的 FC4 情况下,至少有: ext2, ext3, vfat, msdos 等等 filesystem。 -A :依据 /etc/fstab 的内容,将所有的设备都扫瞄一次 (通常开机过程中就会运行此一指令) -a :自动修复检查到的有问题的磁区,所以你不用一直按 y 啰! -r :一定要让用户决定是否需要修复,这与上一个 -a 刚好相反! -y :与 -a 类似,但是某些 filesystem 仅支持 -y 这个参数,所以您也可以利用 -y 啦! -C :可以在检验的过程当中,使用一个长条图来显示目前的进度! -f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入 细部检查的,如果您想要强制 fsck 进入细部检查,就得加上 -f 旗标啰! 范例: 范例一:将前面我们创建的 /dev/hdb5 这个设备给他检验一下! [root@linux ~]# fsck -C -t ext3 /dev/hdb5 fsck 1.37 (21-Mar-2005) e2fsck 1.37 (21-Mar-2005) logical: clean, 11/181056 files, 21706/361446 blocks # 如果一切没有问题,就会出现上述的消息~这是用来检查与修正硬盘错误的指令。注意:通常只有身为 root 且你的系统有问题的时候才使用这个指令,否则在正常状况下使用此一指令, 可能会造成对文件的危害!通常使用这个指令的场合都是在系统出现极大的问题,导致你在 Linux 开机的时候得进入单人单机模式下进行维护的行为时,才必须使用此一指令! 另外,如果你怀疑刚刚格式化成功的硬盘有问题的时后,也可以使用 fsck 来检查一下硬盘呦!其实就有点像是 Windows 的 scandisk 啦!此外,由于 fsck 在扫瞄硬盘的时候,可能会造成部分 filesystem 的损坏,所以『运行 fsck 时, 被检查的 partition 务必不可挂载到系统上!亦即是需要在卸载的状态喔!』
[root@linux ~]# badblocks -[svw] 设备名称 参数: -s :在屏幕上列出进度 -v :可以在屏幕上看到进度 -w :使用写入的方式来测试,建议不要使用此一参数,尤其是待检查的设备已有文件时! 范例: [root@linux ~]# badblocks -sv /dev/hdb5 Checking blocks 0 to 722893 Checking for bad blocks (read-only test): done 893 Pass completed, 0 bad blocks found.这是用来检查硬盘或软碟磁区有没有坏轨的指令!跟 Windows 的 scandisk 相同功能啦!不过由于 fsck 的功能比较强,所以目前大多已经不使用这个指令了!
[root@linux ~]# mount -a [root@linux ~]# mount [-tonL] 设备名称代号 挂载点 参数: -a :依照 /etc/fstab 的内容将所有相关的磁盘都挂上来! -n :一般来说,当我们挂载文件系统到 Linux 上头时, Linux 会主动的将 目前的 partition 与 filesystem 还有对应的挂载点,都记录到 /etc/mtab 那个文件中。不过,有些时刻 (例如不正常关机导致一些问题,而进入单人模式) 系统无法写入 /etc/mtab 时,就可以加上 -n 这个参数来略过写入 mtab 的动作。 -L :系统除了利用设备名称代号 (例如 /dev/hda1) 之外,还可以利用 partition 的表头名称 ( Label ) 来进行挂载喔!所以,最好为您的 partition 取一个 在您系统当中独一无二的名称吧! -t :您的 Linux 支持的文件格式,就写在这里吧!举例来说,我们在上面创建 /dev/hdb5 是 ext3 文件系统,那么要挂载时,就得要加上 -t ext3 来告知系统,用 ext3 的文件格式来挂载该 partition 呢! 至于系统支持的 filesystem 类型在 /lib/modules/`uname -r`/kernel/fs 当中。 常见的有: ext2, ext3, reiserfs, 等 Linux 惯用 filesystem vfat, msdos 等 Windows 常见 filesystem iso9660 为光盘片的格式 nfs, smbfs 等为网络相关文件系统。这部分未来我们会在网络方面提及! 若 mount 后面没有加 -t 文件系统格式时,则 Linux 在缺省的情况下, 会主动以 /etc/filesystems 这个文件内规范的文件系统格式 来尝试主动的挂载喔! -o :后面可以接一些挂载时,额外加上的参数喔!比方说帐号、密码、读写权限等: ro, rw: 此 partition 为唯读(ro) 或可读写(rw) async, sync: 此 partition 为同步写入 (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 让 user 运行 mount ?一般来说, mount 仅有 root 可以进行,但下达 user 参数,则可让 一般 user 也能够对此 partition 进行 mount 。 defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async remount: 重新挂载,这在系统出错,或重新更新参数时,很有用! 范例: 范例一:将刚刚创建的 /dev/hdb5 挂载到 /mnt/hdb5 上面! [root@linux ~]# mkdir /mnt/hdb5 [root@linux ~]# mount -t ext3 /dev/hdb5 /mnt/hdb5 [root@linux ~]# df Filesystem 1K-blocks Used Available Use% Mounted on ....中间省略..... /dev/hdb5 700144 20664 643336 4% /mnt/hdb5 范例二:挂载光盘! [root@linux ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom [root@linux ~]# mount /dev/cdrom # 上面的参数当中提到,如果没有加上 -t 这个参数时,系统会主动的以 # /etc/filesystems 里面规范的内容给他测试一下是否挂载~另外, # 因为我们的 /etc/fstab 里面会规范 /dev/cdrom 应该挂载到那个挂载点, # 因此,直接下达 mount /dev/cdrom 也是可以的喔!(当然要看/etc/fstab设置啦!) 范例三:挂载 Window fat 软碟! [root@linux ~]# mount -t vfat /dev/fd0 /mnt/floppy 范例四:将 / 重新挂载,并加入参数为 rw ! [root@linux ~]# mount -o remount,rw / 范例五:将 Label 名为 logical 的 partition 挂载到 /mnt/hdb5 中 [root@linux ~]# mount -t ext3 -L logical /mnt/hdb5 范例六:将系统所有的以挂载的 partition 数据列出来 [root@linux ~]# mount /dev/hda1 on / type ext3 (rw) /dev/proc on /proc type proc (rw) /dev/shm on /dev/shm type tmpfs (rw) /dev/hda5 on /home type ext3 (rw) /dev/hdb5 on /mnt/hdb5 type ext3 (rw) # 嗯!不加任何参数,则 mount 会将目前系统的所有 partition # 与相关对应的 filesystem 及 mount point 都列出来!在缺省的情况下, mount 这个指令只有 root 才能运行! 如果您想要将整个系统里面记录的 filesystem 与 mount point 对应的数据 (记录在 /etc/fstab 档中!), 全部都挂载上来,那么请运行:
范例一:将 /home 这个目录暂时挂载到 /tmp/home 底下: [root@linux ~]# mkdir /tmp/home [root@linux ~]# mount --bind /home /tmp/home [root@linux ~]# ls -lid /home/ /tmp/home 159841 drwxr-xr-x 6 root root 4096 May 30 20:07 /home/ 159841 drwxr-xr-x 6 root root 4096 May 30 20:07 /tmp/home 范例二:将 /tmp/home 卸载: [root@linux ~]# umount /tmp/home看起来,其实两者链接到同一个 inode 嘛!! ^_^ 没错啦!通过这个 mount --bind 的功能, 您可以将某个目录挂载到其他目录去喔!而并不是整块 filesystem 的啦!
[root@linux ~]# umount 设备代号或挂载点 [root@linux ~]# umount /dev/hdb5 [root@linux ~]# umount /mnt/hdb5就是直接将 mount 上来的文件系统给他卸载即是!卸载之后,可以使用 df 看看是否还存在呢?! 此外,也可以利用 -f 参数将想要卸载的 partition 强制卸载!此外, 卸载的方式,可以下达设备 (如 /dev/hdb5) 或挂载点 (如 /mnt/hdb5),均可接受啦!
[root@linux ~]# mknod 设备名称 [bcp] [Major] [Minor] 参数: 设备种类: b :设置设备名称成为一个周边保存设备文件,例如硬盘等; c :设置设备名称成为一个周边输入设备文件,例如鼠标/键盘等; p :设置设备名称成为一个 FIFO 文件; Major :主要设备代码; Minor :次要设备代码; 范例: 范例一:创建 /dev/hda10 这个磁盘保存设备 [root@linux ~]# mknod /dev/hda10 b 3 10 # 上面那个 3 与 10 是有意义的,不要随意设置啊!还记得我们说过,在 Linux 底下所有的设备都以文件来代表吧!? 但是那个文件如何代表该设备呢?很简单!就是通过文件的 major 与 minor 数值来替代的~所以,那个 major 与 minor 数值是有特殊意义的, 不是随意设置的喔!举例来说,如果以硬盘设备来说明,那么 /dev/hda 到 /dev/hdd 的 major 与 minor 代码是:
硬盘代号 | Major | Minor |
/dev/hda | 3 | 0~63 |
/dev/hdb | 3 | 64~127 |
/dev/hdc | 22 | 0~63 |
/dev/hdd | 22 | 64~127 |
[root@linux ~]# e2label 设备名称 新的Label名称 [root@linux ~]# e2label /dev/hdb5 hdb5 [root@linux ~]# dumpe2fs -h /dev/hdb5 Filesystem volume name: hdb5 .....其他省略.....这个东西也挺有趣的,主要的功能是用来修改『磁盘的表头数据』,也就是 label 啦。 那是甚么东西呢?如果你使用过 Windows 的文件总管的话,那么应该会晓得, 每个盘符后面都有个名称吧,呵呵!那个就是 label 啰。这个东西除了有趣之外, 也会被使用到一些设置文件当中,举例来说,当我们在挂载磁盘的时候,除了利用磁盘的代号之外 (/dev/hdxx) 也可以直接利用磁盘的 label 来作为挂载的磁盘挂载点喔!基本上, 就是那个 /etc/fstab 文件的设置啰!
[root@linux ~]# tune2fs [-jlL] 设备代号 参数: -j :将 ext2 的 filesystem 转换为 ext3 的文件系统; -l :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来~ -L :类似 e2label 的功能,可以修改 filesystem 的 Label 喔! 范例: [root@linux ~]# tune2fs -l /dev/hdb5这个指令的功能其实很广泛啦~上面鸟哥仅列出很简单的一些参数而已, 更多的用法请自行参考 man tune2fs 。比较有趣的是,如果您的某个 partition 原本是 ext2 的文件系统,如果想要将他更新成为 ext3 文件系统的话, 利用 tune2fs 就可以很简单的转换过来啰~
[root@linux ~]# hdparm [-icdmXTt] 设备名称 参数: -i :系统在开机的过程当中,会利用本身内核的驱动程序(模块)来测试硬盘, 利用 -i 参数,可将这些测试值取出来,这些值不一定是正确的, 不过,却可以提供我们一个参考值的依据! -c :设置 32-bit (32比特)访问模式。这个 32 比特访问模式指的是在硬盘在与 PCI 接口之间传输的模式,而硬盘本身是依旧以 16 比特模式在跑得! 缺省的情况下,这个设置值都会被打开,建议直接使用 c1 即可! -d :设置是否激活 dma 模式, -d1 为启动, -d0 为取消; -m :设置同步读取多个 sector 的模式。一般来说,设置此模式,可降低系统因为 读取磁盘而损耗的性能~不过, WD 的硬盘则不怎么建议设置此值~ 一般来说,设置为 16/32 是优化,不过,WD 硬盘建议值则是 4/8 。 这个值的最大值,可以利用 hdparm -i /dev/hda 输出的 MaxMultSect 来设置喔!一般如果不晓得,设置 16 是合理的! -X :设置 UtraDMA 的模式,一般来说, UDMA 的模式值加 64 即为设置值。 并且,硬盘与主板芯片必须要同步,所以,取最小的那个。一般来说: 33 MHz DMA mode 0~2 (X64~X66) 66 MHz DMA mode 3~4 (X67~X68) 100MHz DMA mode 5 (X69) 如果您的硬盘上面显示的是 UATA 100 以上的,那么设置 X69 也不错! -T :测试暂存区 cache 的访问性能 -t :测试硬盘的实际访问性能 (较正确!) 范例: 范例一:取得我硬盘的最大同步访问 sector 值与目前的 UDMA 模式 [root@linux ~]# hdparm -i /dev/hda Model=ST320430A, FwRev=3.07, SerialNo=7BX02236 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0 BuffType=unknown, BuffSize=512kB, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=40079088 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 *udma4 AdvancedPM=no WriteCache=enabled Drive conforms to: device does not report version: 1 2 3 4 # 在输出的数据中,有几个比较重要的,除了 MaxMultSec 这个数值外, # 那个 UDMA modes: 会显示目前的 UDMA 模式 (有 * 号的那个为目前的值)。 范例二:取得我主板上面关于 IDE 的速度限制 [root@linux ~]# lspci -v 00:07.1 IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B PIPC Bus Master IDE (rev 10) (prog-if 8a [Master SecP PriP]) Subsystem: VIA Technologies, Inc. VT8235 Bus Master ATA133/100/66/33 IDE Flags: bus master, medium devsel, latency 32 I/O ports at d000 [size=16] Capabilities: [c0] Power Management version 2 # 我可以通过 lspci 来直接取得 PCI 接口上的各个设备设备。 # 其中,可以找到 IDE 接口,并从中找到关于这个接口可接受的速度呢! 范例三:启动我的 UDMA 在 mode 4 喔~ [root@linux ~]# hdparm -d1 -c1 -X68 /dev/hda # 由范例一与范例二,鸟哥的主板上面大概仅能支持到 UDMA 66 吧~ # 那就是 mode4 啰~所以, X = 64+4 = 68 ,因此,设置就是 -X68 啰~ 范例四:测试这颗硬盘的读取性能 [root@linux ~]# hdparm -Tt /dev/hda /dev/hda: Timing cached reads: 544 MB in 2.01 seconds = 270.28 MB/sec Timing buffered disk reads: 80 MB in 3.01 seconds = 26.56 MB/sec # 我的机子没有很好啦~这样的速度.....差强人意~我们都知道目前的 IDE 硬盘主要的传输模式为 ATA 模式,最近 (2002年)已经出到了 ATA 133 了!不过,传统上, ATA 66 就已经很厉害了!新的 IDE 硬盘也没有办法完全利用 ATA 100 呢!但是,你知道吗?有没有打开 ATA 这个传输信道的 DMA 模式, 对于硬盘的访问效率差很大呦!
[root@linux ~]# mount -t ext2 /dev/fd0 /media/floppy [root@linux ~]# mount -t vfat /dev/fd0 /media/floppy [root@linux ~]# umount /media/floppy所以啰!即使是 Windows 格式的文件,在 Linux 底下仍然是可以读取的到的呦!另外, 要注意的是,即使你使用软碟完毕之后,一定要将 /media/floppy 卸载之后才可以取出软盘片喔!不然系统会一直告诉你发生错误啰!而在卸载 /media/floppy 的时候,你一定不能在该目录底下,否则会发生错误消息喔! 而如果加载的格式不符合,系统也不会将该软碟挂上来的呦!好了,那么怎么制作 ext2 的软碟呢?简单的很,就使用 mke2fs /dev/fd0 就行啦!
[root@linux ~]# mkdir /mnt/win98 [root@linux ~]# mount -t vfat /dev/hda1 /mnt/win98 [root@linux ~]# mount -t vfat -o iocharset=cp950 /dev/hda1 /mnt/win98如此一来就将 Windows 的系统挂到 Linux 里面啰!简单吧!请注意, 上面那个第三行所使用的参数可以让您的 Windows 98 的磁区当中的文件显示出正确的中文呦! 因为加入了中文编码啊! ^_^
[root@linux ~]# mkdir /mnt/usb [root@linux ~]# mount -t vfat /dev/sda1 /mnt/usb上头是假设您的 USB U盘使用的是 FAT 的 Windows 文件格式而设置的。 如果您的U盘是 NTFS 的 Windows 2000 文件格式,那就比较麻烦, 因为 FC4 缺省情况下,并不支持这个文件系统的~ 如果您执意要挂载 NTFS 的文件格式,那么..... 请参考底下这个计划的网站啰~
[root@linux ~]# cat /etc/fstab # Device Mount point filesystem parameters dump fsck LABEL=/ / ext3 defaults 1 1 /dev/hda5 /home ext3 defaults 1 2 /dev/hda3 swap swap defaults 0 0 /dev/hdc /media/cdrom auto pamconsole,exec,noauto,managed 0 0 /dev/devpts /dev/pts devpts gid=5,mode=620 0 0 /dev/shm /dev/shm tmpfs defaults 0 0 /dev/proc /proc proc defaults 0 0 /dev/sys /sys sysfs defaults 0 0其实这个 /etc/fstab 就是将我们使用 mount 来挂载一个设备到系统的某个挂载点, 所需要下达的指令内容,将这些内容通通写到 /etc/fstab 里面去,而让系统一开机就主动挂载啰~ 那么 mount 下达指令时,需要哪些参数?不就是『设备代号、挂载点、文件系统类别、参数』等等, 而我们的 /etc/fstab 则加入了两项额外的功能,分别是备份指令 dump 的运行与否, 与是否开机进行 fsck 扫瞄磁盘呢~
参数 | 内容意义 |
async/sync 异步/同步 |
是否允许磁盘与内存中的数据以同步写入的动作?使用 async 这个异步写入的方式会比较快速一些。 |
auto/noauto 自动/非自动 |
在开机的时候是否自动挂载该磁区?既然设置在这个区域内了, 当然希望开机的时候自动挂载啰! |
rw/ro 可读写/唯读 |
让该磁区以可读写或者是唯读的型态挂载上来,如果是 vfat 之类的非 Linux 传统磁区,您不想让 Linux 变更的话,那么使用 ro 也不错!能够提供有效的保护呢! |
exec/noexec 可运行/不可运行 |
限制在此文件系统内是否可以进行『运行』的工作?如果是纯粹用来保存数据的, 那么可以设置为 noexec 会比较安全,相对的,会比较麻烦! |
user/nouser 允许/不允许用户挂载 |
是否允许用户使用 mount 指令来挂载呢?一般而言,我们当然不希望一般身份的 user 能使用 mount 啰,因为太不安全了,因此这里应该要设置为 nouser 啰! |
suid/nosuid 具有/不具有 suid 权限 |
该文件系统是否允许 SUID 的存在?一般而言,如果不是 Linux 系统的磁区,而是一般数据的 partition ,那么设置为 nosuid 确实比较安全一些!毕竟有 SUID 是蛮可怕的一件事。 |
usrquota | 注意名称是『 usrquota 』不要拼错了!这个是在启动 filesystem 支持磁盘配额模式,更多数据我们在第四篇再谈。 |
grpquota | 注意名称是『grpquota』,启动 filesystem 对群组磁盘配额模式的支持。 |
defaults | 同时具有 rw, suid, dev, exec, auto, nouser, async 等参数。 基本上,缺省情况使用 defaults 设置即可! |
/dev/hdb5 /mnt/hdb5 ext3 defaults 2 2
很简单吧!所以啦,以后您自己创建的磁盘文件系统想在开机的时候挂载好时,就在 /etc/fstab 加入吧!
此外,这个 /etc/fstab 还有什么特殊功能呢?还记得使用 mount -a
时,我们提到的该参数参考文件吧?!没错啊!就是这个 /etc/fstab 啊!而且,一般来说,
当我们编辑 /etc/fstab 后,为了避免可能的错误,通常就会以
mount -a 这个指令来测试看看呢!这是很重要的一个测试动作喔!
[root@linux ~]# mount -n -o remount,rw /
加上 -n 则不更新 /etc/mtab ,加上 -o 则提供额外的参数设置。
利用这一动作,嘿嘿!您的 / 就可以读写,那么自然就能够更新文件内容啰~
[root@linux ~]# dd if=/dev/zero of=/tmp/loopdev bs=1024k count=2048 2048+0 records in 2048+0 records out # 这个指令在下一小节也会谈到,那个 if 是 input file, # of 是 output file ,至于 bs 是每个 block 大小, # count 则是总共几个 bs 的意思。不过,测试时,注意 /tmp # 那个 partition 的大小啊!格式化
[root@linux ~]# mke2fs -j /tmp/loopdev mke2fs 1.35 (28-Feb-2004) loopdev is not a block special device. Proceed anyway? (y,n) y Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 262144 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user ....以下省略.....挂载
[root@linux ~]# mount -t ext3 -o loop /tmp/loopdev /media/cdrom/ [root@linux ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /tmp/loopdev 2064208 35880 1923472 2% /media/cdrom多了个独立的设备给您使用喔!其实就是那个 2GB 的文件内容啦! 这东西看起来似乎没有什么用途的样子,不过,如果您未来想要玩 Linux 上面的『虚拟主机』的话, 也就是以一部 Linux 主机再切割成为数个独立的主机系统时,类似 VMware 这类的软件, 在 Linux 上使用 xen 这个软件,他就可以配合这种 loop device 的文件类型来进行根目录的挂载, 真的非常有用的喔! ^_^
例题一:如果您的系统是以鸟哥建议的方式来安装的,那么系统应该有一块剩余的空间。
请将该剩余的空间格式化成为一个 swap device ,并且挂载到系统上! |
[root@linux ~]# dd if=/dev/zero of=/tmp/swap bs=4k count=16382 16382+0 records in 16382+0 records out # dd 这个指令是用来转换文件并且 copy 用的; # if 指的是要被转换的输入文件格式 /dev/zero 可以由 man zero 来查看内容; # of 指的是输出的文件,我们将之输出到 /tmp/swap 这个文件; # bs 指的是一个磁区占用几个 kb ; # count 指的是要使用多少个 bs ,所以最后的容量为 bs*count = 4k * 16382 ~ 64MB如上所述,我们将创建一个文件名为 /tmp/swap 的文件,且其内容共有 64MB 左右大小的文件;
[root@linux ~]# mkswap /tmp/swap Setting up swapspace version 1, size = 67096576 bytes # 请注意,这个指令在下达的时候请『特别小心』,因为下错字符控制, # 将可能使您的 filesystem 挂掉!
[root@linux ~]# free total used free shared buffers cached Mem: 62524 60200 2324 0 716 19492 -/+ buffers/cache: 39992 22532 Swap: 127004 2620 124384 [root@linux ~]# swapon /tmp/swap # 不要怀疑!这样就已经将虚拟内存增加 64 MB 啰!如果您需要每次都启动该文件, 那么将 swapon /tmp/swap 写入 /etc/rc.d/rc.local 当中即可! [root@linux ~]# free total used free shared buffers cached Mem: 62524 60240 2284 0 724 19492 -/+ buffers/cache: 40024 22500 Swap: 192524 2620 189904
[root@linux ~]# swapoff /tmp/swap