◆1.回顾认识硬盘,以及partition(另见NG_Linux6_练习机上装Fedora.txt):
☞ 扇区 ( sector ) - 最小的物理组成单位,一般为512byte - 0.5KB
☞ 块 ( block ) - 最小储存单位,sector 的 2 的次方倍数最小的物理组成单位
ps:block不是越大越好,要根据实际的文件零碎情况确定
superblock:superblock之于partition 等同于 0磁道之于硬盘
☞ 磁道 ( track) - 当磁头固定不动 (假设机械手臂不动) ,硬盘盘转一圈所画出来的圆就是所谓的磁道
☞ 磁柱 ( cylinder ) - 所有硬盘盘上面相同半径的那一个磁道就组成磁柱
☞ 分区( partition,既是指动作,又是指动作的结果 )
- 动作:以指定“起始、结束磁柱”的方式将硬盘划分为若干区域。
- 结果:划分出来的区域就是(partition)
ps:这些分割的信息就是记录在MBR里
☞ 每个partition都对应着一种文件系统
◆2.Linux 的 EXT2 档案系统( inode ):
☞ ext2 档案系统当中,我们将每个档案分为【属性】、【内容】两个部分来储存
- 属性 -> inode(还是pointer to the block in which the file's content is recorded)
- 内容 -> block中
当 partition 被格式化为 ext2 的档案系统时,他一定会有 inode table 与 block area 这两个区域。
o inode【大小 128 bytes】 中的具体内容:
- 该档案的拥有者与群组(owner/group);
- 该档案的存取模式(read/write/excute);
- 该档案的类型(type);
- 该档案的相关时间:
ctime 建立或状态改变的时间
atime 最近一次的读取时间
mtime 最近修改的时间(ls预设的显示时间)
- 该档案的容量(size);
- 定义档案特性的旗标(flag),如 SetUID...;
- 该档案真正内容的指向 (pointer);
ps:可以利用 ls 的相关功能来查询到时间!而预设的显示时间是 mtime
ls -la --time=atime PATH
◆3.Linux 系统如何读取一个档案的内容?
☞ 目录:
当我们在 Linux 下的 ext2 档案系统建立一个目录时, ext2 会分配一个 inode 与至少一块 Block 给该目录。其中
,inode 记录该目录的相关属性,并指向分配到的那块 Block ;而 Block 则是记录在这个目录下的相关连的档案(或目录)
的关连性!
☞ 档案:
当我们在 Linux 下的 ext2 建立一个一般档案时, ext2 会分配至少一个 inode 与相对于该档案大小的 Block 数量
给该档案。例如:假设我的一个 Block 为 4 Kbytes ,而我要建立一个 100 KBytes 的档案,那么 linux 将分配一个
inode 与 25 个 Block 来储存该档案!
ps:inode 本身并不纪录文件名,而是记录档案的相关属性,至于文件名则是记录在目录所属的 block 区域
☞ 档案与目录的关系:
档案的相关连结会记录在目录的 block 数据区域, 所以当我们要读取一个档案的内容时,我们的 Linux 会先由根目
录 / 取得该档案的上层目录所在 inode , 再由该目录所记录的档案关连性 (在该目录所属的 block 区域) 取得该档案的
inode , 最后在经由 inode 内提供的 block 指向,而取得最终的档案内容
☞ 个人感觉:
o 目录在block区的内容就是Map<String, inode号>
↑
文件名
[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号 文件名
o 根据路劲搜索文件时,inode - block - inode - block ... - inode - block ... - inode - block
◆补充:something confusing...
[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 ?
answer:原因很简单啊!因为 / 是 /dev/hda1 而 /home 是 /dev/hda2 ,这两个 partition 都有 inode number 为 2
的号码。
◆4.ext2 有几个特色:
- Blocks 与 inodes 在一开始格式化时 (format) 就已经固定了;
- 一个 partition 能够容纳的档案数与 inode 有关;
- 一般来说,每 4Kbytes 的硬盘空间分配一个 inode ;
- 一个 inode 的大小为 128 bytes;
- Block 为固定大小,目前支持 1024/2048/4096 bytes(1k/2k/4k) 等;
- Block 越大,则损耗的硬盘空间也越多。
- 关于单一档案: 若 block size=1024,最大容量为 16GB,若 block size=4096,容量最大为 2TB;
- 关于整个 partition : 若 block size=1024,则容量达 2TB,若 block size=4096,则容量达 32TB。
- 文件名最长达 255 字符,完整文件名长达 4096 字符。
◆5.inode数量问题:
☞ 通常 inode 数量的多寡设定为 (partition 的容量) 除以 (一个 inode 预计想要控制的容量)。 举例来说,若我的
block 规划为 4Kbytes,假设我的一个 inode 会控制两个 block ,亦即是假设我的一个档案大致的容量在 8Kbytes 左右
时,假设我的这个 partition 容量为 1GBytes, 则 inode 数量共有:( 1G * 1024M/G * 1024K/M ) / ( 8K ) = 131072
个。而一个 inode 占用 128 bytes 的空间,因此格式化时就会有 ( 131072个 * 128bytes/个 ) = 16777216 byes =
16384 Kbytes 的 inode table 。也就是说,这一个 1GB 的 partition 在还没有储存任何数据前, 就已经少了 16MBytes
的容量
☞ 当 block 大小越小,而 inode 数量越多,则可利用的空间越多,但是大档案写入的效率较差; 这种情况适合档案数
量多,但是档案容量小的系统,例如 BBS 或者是新闻群组( News )这方面服务的系统;
☞ 当 Block 大小越大,而 inode 数量越少时,大档案写入的效率较佳,但是可能浪费的硬盘空间较多; 这种状况则比
较适合档案容量较大的系统!
◆6.EXT2 fs物理结构
☞ 物理结构划分
superblock
group description ┐
block bitmap │
inode bitmap ├ Block Group1
inode table │
data blocks ┘
Block Group2
...
Block GroupN
o SuperBlock:如前所述, Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock ,就没有这个
filesystem 了。他记录的信息主要有:
- block 与 inode 的总量;
- 未使用与已使用的 inode / block 数量;
- 一个 block 与一个 inode 的大小;
- filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等档案系统的相关信息;
- 一个 valid bit 数值,若此档案系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。
o Group Description:纪录此 block 由何处开始记录;
o Block bitmap:此处记录那个 block 有没有被使用;
o Inode bitmap:此处记录那个 inode 有没有被使用;
o Inode table:为每个 inode 数据存放区;
o Data Blocks:为每个 block 数据存放区。
☞ 查看这些信息
sudo dumpe2fs /dev/hda1
◆7.日志式档案系统
☞ 产生原因
在 EXT2 档案系统当中,要进行档案的写入时,会将数据分别在数据存放区与 metadata 区记录下来, 若当这两个动
作无法一次完成时,就会造成所谓的不一致现象。若发生不一致现象, 因为系统不知道是那个档案发生不一致现象,所以
就会将整个 filesystem 做一致性的检查,如此一来,很费时。
☞ 在 filesystem 当中,规划出一个区块,专门来记录写入或修订档案时的步骤,也就是说:
1. 当系统要写入一个档案的时候,会先在日志记录区块中纪录:某个档案准备要写入磁盘了;
2. 开始写入档案的权限与数据;
3. 开始更新 metadata 的数据;
4. 完成数据与 metadata 的更新后,在日志记录区块当中完成该档案的纪录。
◆8.挂载点的意义 (mount point):
☞ 基本概念:
- 档案系统 (filesystem) 通过『挂载 (mount)』才能被Linux使用
- 目录可以记录文件名与 inode 的相关信息,此外, 目录也是让我们得以跟 filesystem 产生对应的入口点。因此,我
们称那个入口点目录为『 挂载点 (mount point) 』
ps:挂载点一定是『目录』而不是档案!也就是说,这个挂载点就是进入该 filesystem 的入口
◆9.其它 Linux 支持的档案系统
☞ 常见的支持档案系统有:
- 传统档案系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;
- 日志式档案系统: ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS
- 网络档案系统: NFS / SMBFS
☞ 查看:
- 想要知道您的 Linux 支持的档案系统有哪些,可以察看底下这个目录:
[root@linux ~]# ls -l /lib/modules/`uname -r`/kernel/fs
- 查看系统目前已启用的档案系统:
[root@linux ~]# cat /proc/filesystems
◆10.磁盘与目录的容量:
☞ df
[root@linux ~]# df [-ahikHTm] [目录或文件名]
o 参数:
* -a :列出所有的档案系统,包括系统特有的 /proc 等档案系统;
ps :使用 -a 这个参数时,系统会出现 /proc 这个扇区,但是里面的东西都是 0 ,不要紧张! /proc 的东西都是
Linux 系统所需要加载的系统数据,而且是挂载在『内存当中』的, 所以当然没有占任何的硬盘空间啰!
-k :以 KBytes 的容量显示各档案系统;
-m :以 MBytes 的容量显示各档案系统;
* -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
* -T :连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
* -i :不用硬盘容量,而以 inode 的数量来显示
df -h /etc 在 df 后面加上目录或者是档案时, df会自动的分析该目录或档案所在的 partition ,并将该
partition 的容量显示出来,
o 结果说明:
- Filesystem:代表该档案系统是在那个 partition 啊,所以列出装置名称;
- 1k-blocks:说明底下的数字单位是 1KB 呦!可利用 -h 或 -m 来改变容量;
- Used:顾名思义,就是使用掉的硬盘空间啦!
- Available:也就是剩下的磁盘空间大小;
- Use%:就是磁盘的使用率啦!如果使用率高达 90% 以上时, 最好需要注意一下了,免得容量不足造成系统问题喔!
(例如最容易被灌爆的 /var/spool/mail 这个放置邮件的磁盘)
- Mounted on:就是磁盘挂载的目录所在啦!(挂载点啦!)
☞ du
[root@linux ~]# du [-ahskm] 档案或目录名称
o 参数:
-a :列出所有的【档案与】目录容量,因为预设仅统计目录底下的档案量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
ex:du -sm /etc/*
◆11.连接档
连结档有点类似 Windows 底下的『快捷方式』!也就是很多的连结档案( link file )其实都指向同一个来源档案(
source file )!不过,在所有的档案类型当中, 连结档算是比较难理解的一部份了!因为连结档还分成 Hard link 与
symbolic link 两种,这两种连结档在架构上是完全不一样的。
☞ Hard Link (硬式连结或实际连结)
o Hard Link 【只是在某个目录下新增一个该档案的关连数据】而已!
o 一般来说,使用 hard link 设定连结文件时,磁盘的空间与 inode 的数目都不会改变! 由上面的说明来看,我们可
以知道, hard link 只是在某个目录下的 【block】 多写入一个关连数据,所以当然不会用掉 inode 与磁盘空间啰!
o 由于 hard link 是在同一个 partition 上面进行数据关连的建立,所以 hard link 是有限制的:
- 不能跨 Filesystem;
- 不能 link 目录。【没看懂,为啥不是直接指到目录的inode?】
*注意 以 hard link 进行『档案的连结』时,可以发现,在 ls -l 所显示的第二字段会增加一
☞ Symbolic link (符号连结,亦即是快捷方式)
基本上, Symbolic link 就是在建立一个独立的档案, 而这个档案会让数据的读取指向他 link 的那个档案内容!由
于只是利用档案来做为指向的动作, 所以,当来源档被删除之后,symbolic link 的档案会『开不了』, 会一直说『无法
开启某档案!』
与 Windows 的快捷方式可以划上等号,由 Symbolic link 所建立的档案为一个独立的新的档案,所以会占用掉 inode
与 block
◆12.关于目录的 link 数量:
o 当我们建立一个新目录名称为 /tmp/testing 时,基本上会有三个东西,那就是:
- /tmp/testing <- 该目录
- /tmp/testing/. <- 该目录
- /tmp/testing/.. <- 上级目录
* so:当我们建立一个新的目录时,『新的目录的 link 数为 2 ,而上层目录的 link 数则会增加 1 』
◆13.磁盘的分割、格式化、检验与挂载:
如果我们想要在系统里面新增一颗硬盘时,应该有哪些动作需要做的呢?有几个动作啰:
- 1. 对磁盘进行分割,以建立可用的 partition ;
- 2. 对该 partition 进行格式化( format ),以建立系统可用的 filesystem;
- 3. 若想要仔细一点,则可对刚刚建立好的 filesystem 进行检验;
- 4. 在 Linux 系统上,需要建立挂载点 ( 亦即是目录 ),并将他挂载上来;
☞ 磁盘分割:fdisk
fdisk -l /dev/sda
fdisk其实就是在编辑分区表『 partition table 』
m p(相当于在外边fdisk -l) n d w q
“+100M”
在 fdisk 完成之后,请记得使用 mke2fs 格式化
以 root 的身份进行硬盘的 partition 时,最好是在单人维护模式底下比较安全一些, 此外,在进行 fdisk 的时候
,如果该硬盘某个 partition 还在使用当中, 那么很有可能系统核心会无法重新加载硬盘的 partition table ,解决的
方法就是将该使用中的 partition 给他卸载,然后再重新进入 fdisk 一遍,重新写入 partition table ,那么就可以成
功啰!
☞ 磁盘格式化:mke2fs
[root@linux ~]# mke2fs [-bicLj] 装置名称
o 参数:
-b :可以设定每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种;
-i :多少容量给予一个 inode 呢?
-c :检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试;
如果下达两次 -c -c 的话,会测试读写(read-write),会很慢~
-L :后面可以接表头名称 (Label),这个 label 是有用的喔!后面会讲~
-j :本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3
o 范例:
1.将刚刚建立的 /dev/hdb5 格式化成为 ext3 !且名称为 logical
[root@linux ~]# mke2fs -j -L "logical" /dev/hdb5
o 其他格式?
see:mkfs
☞ 制作一个可以开机进入 Linux 的软盘:mkbootdisk
[root@linux ~]# mkbootdisk --device /dev/fd0 `uname -r`
↑
目前 Linux 系统所使用的核心版本
低阶格式化1.44软盘:mke2fs 指令
fdformat /dev/fd0H1440
☞ 磁盘检验: fsck(有点像是 Windows 的 scandisk)
[root@linux ~]# fsck [-AtCary] 装置名称
* fsck, “成果”放在『 lost+found 』,只有挂载 partition 的目录 (就是挂载点) 才会有这个预设的目录
** 执行 fsck 时, 被检查的 partition 务必不可挂载到系统上!亦即是需要在卸载的状态
o 参数:
-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 旗标啰!
☞ 磁盘检验:badblocks
badblocks -[svw] 装置名称
* 跟 Windows 的 scandisk 相同功能啦!不过由于 fsck 的功能比较强,所以目前大多已经不使用这个指令了)
o 参数:
-s :在屏幕上列出进度
-v :可以在屏幕上看到进度
-w :使用写入的方式来测试,建议不要使用此一参数,尤其是待检查的装置已有档案时!
o 范例:
[root@linux ~]# badblocks -sv /dev/hdb5
Checking blocks 0 to 722893
Checking for bad blocks (read-only test): done
☞ sync 直接将系统暂存在内存当中的数据回存写入磁盘当中
◆14.磁盘挂载与卸载:
要将建立起来的磁盘档案系统或软盘正式的在 Linux 上面启用时,一定需要将他挂载上档案系统! 而所谓的『挂载点
』则是该 partition 所在的目录,且在该目录下的所有目录都归在该 partition 所有。
* 如果您要用来挂载的目录里面并不是空的,那么挂载了档案系统之后, 那么原目录下的东西就会【暂时的消失】
* 在 Linux 或 Unix 系统之下,分区是以目录来代表,也就是说, 一个目录很可能就是一个分区了! 举个例子来说,
通常 Linux 预设的软盘挂载的地点在 /mnt/floppy 这里!那么如果你需要软盘的数据时,就将 /dev/fd0 这一个装置(前
面提过啰!这个是周边存取装置的一个设备档案类型)挂上 /mnt/floppy 就可以啦!然后你进入到 /mnt/floppy 就可以读
取软盘的数据啰
o 例子:
假设: / 为 /dev/hda1
/home 为 /dev/hda2
则:那么在 /home/test 底下的咚咚就也都归 /dev/hda2 这个 partition 所有
☞ mount
[root@linux ~]# mount -a
[root@linux ~]# mount [-tonL] 装置名称代号 挂载点
o 参数:
-a :依照 /etc/fstab 的内容将所有相关的磁盘都挂上来!
-n :一般来说,当我们挂载档案系统到 Linux 上头时, Linux 会主动的将目前的 partition 与 filesystem 还有对
应的挂载点,都记录到 /etc/mtab 那个档案中。不过,有些时刻 (例如不正常关机导致一些问题,而进入单人模式)系统无
法写入 /etc/mtab 时,就可以加上 -n 这个参数来略过写入 mtab 的动作。
-L :系统除了利用装置名称代号 (例如 /dev/hda1) 之外,还可以利用 partition的表头名称 ( Label ) 来进行挂载
-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: 重新挂载,这在系统出错,或重新更新参数时,很有用!
o 范例:
- 范例一:将刚刚建立的 /dev/hdb5 挂载到 /mnt/hdb5 上面!
[root@linux ~]# mkdir /mnt/hdb5
[root@linux ~]# mount -t ext3 /dev/hdb5 /mnt/hdb5
[root@linux ~]# df
- 范例二:挂载光盘!
[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
[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
↑
设置编码
- 范例四:将 / 重新挂载,并加入参数为 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)
o 我们也可以利用 mount 来将某个目录挂载到另外一个目录
- 范例一:将 /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
??????? 为什么这不是硬链接的概念???
☞ unmount(将装置档案卸载)
[root@linux ~]# umount 装置代号或挂载点
o 范例:
[root@linux ~]# umount /dev/hdb5(装置代号)
[root@linux ~]# umount /mnt/hdb5(挂载点)
◆15.磁盘参数修订:
☞ mknod
在 Linux 底下所有的装置都以档案来代表,however,个档案如何代表该装置呢?
[root@linux ~]# mknod 装置名称 [bcp] [Major] [Minor]
o 参数:
- 装置种类:
b :设定装置名称成为一个周边储存设备档案,例如硬盘等;
c :设定装置名称成为一个周边输入设备档案,例如鼠标/键盘等;
p :设定装置名称成为一个 FIFO 档案;
- Major :主要装置代码;
- Minor :次要装置代码;
o 范例:
范例一:建立 /dev/hda10 这个磁盘储存装置
[root@linux ~]# mknod /dev/hda10 b 3 10
↑
# 上面那个 3 与 10 是有意义的,不要随意设定!更多与 Linux 核心有关的装置及装置代号可以参考:
• http://www.kernel.org/pub/linux/docs/device-list/devices.txt
☞ e2label,修改『磁盘的表头数据』,也就是 label
[root@linux ~]# e2label 装置名称 新的Label名称
o 范例:
[root@linux ~]# e2label /dev/hdb5 hdb5
[root@linux ~]# dumpe2fs -h /dev/hdb5
Filesystem volume name: hdb5
.....其它省略.....
ps:除了利用磁盘的代号之外 (/dev/hdxx) 也可以直接利用磁盘的 label 来挂
/etc/fstab
☞ tune2fs
[root@linux ~]# tune2fs [-jlL] 装置代号
o 参数:
-j :将 ext2 的 filesystem 转换为 ext3 的档案系统;
-l :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来~
-L :类似 e2label 的功能,可以修改 filesystem 的 Label 喔!
o 范例:
[root@linux ~]# tune2fs -l /dev/hdb5
☞ hdparm 启动 DMA 模式,以及测试硬盘的存取效能等等...(其他选项不要轻易改)
o 范例:测试这颗硬盘的读取效能
[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
◆16.设定开机挂载
/etc/fstab 及 /etc/mtab
系统挂载的一些限制:
• 根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。
• 其它 mount point 必须为已建立的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则
• 所有 mount point 在同一时间之内﹐只能挂载一次。
• 所有 partition 在同一时间之内﹐只能挂载一次。
• 如若进行卸载﹐您必须先将工作目录移到 mount point(及其子目录) 之外。
☞ /etc/fstab
[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 来挂载一个装置到系统的某个挂载点, 所需要下达的指令内容,除了
『装置代号、挂载点、档案系统类别、参数』等等,还加入了两项额外的功能,分别是备份指令 dump 的执行与否,以及是
否开机进行 fsck 扫瞄磁盘
o 栏位说明
1.磁盘装置代号或该装置的 Label
使用Label挂载时,格式为:LABEL=(your label name) 来设定您的装置
2.挂载点 (mount point)
3.磁盘分割槽的档案系统 (fs)
4.档案系统参数:每个档案系统还有很多参数可以加入的,例如中文编码的 iocharset=big5,codepage=950 之类
• async/sync 异步/同步
是否允许磁盘与内存中的数据以同步写入的动作?使用 async 这个异步写入的方式会比较快速一些。
• auto/noauto 自动/非自动
在开机的时候是否自动挂载该扇区?既然设定在这个区域内了, 当然希望开机的时候自动挂载啰!
• rw/ro 可擦写/只读
让该扇区以可擦写或者是只读的型态挂载上来,ro适用于 vfat 之类的非 Linux 传统扇区。
• 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 设定即可!
5. 能否被 dump 备份指令作用: 在 Linux 当中,可以利用 dump 这个指令来进行系统的备份的。而 dump 指令则会
针对 /etc/fstab 的设定值,去选择是否要将该 partition 进行备份的动作呢! 0 代表不要做 dump 备份, 1 代表要进
行 dump 的动作。 2 也代表要做 dump 备份动作, 不过,该 partition 重要度比 1 小。
6. 是否以 fsck 检验扇区: 开机的过程中,系统预设会以 fsck 检验我们的 partition 内的 filesystem 是否完整
(clean)。 不过,某些 filesystem 是不需要检验的,例如虚拟内存 swap ,或者是特殊档案系统, 例如 /proc 与 /sys
等等。所以,在这个字段中,我们可以设定是否要以 fsck 检验该 filesystem 喔。 0 是不要检验, 1 是要检验, 2 也
是要检验,不过 1 会比较早被检验啦! 一般来说,根目录设定为 1 ,其它的要检验的 filesystem 都设定为 2 就好了。
o /etc/fstab 是开机时的设定档,不过,实际 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这两个档案当
中的。每次我们在更动 filesystem 的挂载时,也会同时更动这两个档案喔!但是,万一发生您在 /etc/fstab 输入的数据
错误,导致无法顺利开机成功,而进入单人维护模式当中,那时候的 / 可是 read only 的状态,当然您就无法修改
/etc/fstab ,也无法更新 /etc/mtab 啰~那怎么办? 没关系,可以利用底下这一招:
[root@linux ~]# mount -n -o remount,rw /
加上 -n 则不更新 /etc/mtab ,加上 -o 则提供额外的参数设定。 利用这一动作,嘿嘿!您的 / 就可以读写,那么
自然就能够更新档案内容啰~
◆17.特殊装置 loop 挂载
☞ 虚拟装置的建立和挂载
1.建立大型档案
[root@linux ~]# dd if=/dev/zero of=/tmp/loopdev bs=1024k count=2048
2048+0 records in
2048+0 records out
2.格式化
[root@linux ~]# mke2fs -j /tmp/loopdev
3.挂载
[root@linux ~]# mount -t ext3 -o loop /tmp/loopdev /media/cdrom/
[root@linux ~]# df
☞ swap 的扩增
swap 主要的功能是当物理内存不够时,则某些在内存当中所占的程序会暂时被移动到 swap 当中,让物理内存可以被
需要的程序来使用。另外,如果您的主机支持电源管理模式, 也就是说,您的 Linux 主机系统可以进入『休眠』模式的话
,那么, 运作当中的程序状态泽会被纪录到 swap 去,以作为『唤醒』主机的状态依据!。 另外,有某些程序在运作时,
本来就会利用 swap 的特性来存放一些数据段
swap 的建立其实也很简单。建立出 swap 这个【装置】【或】者是【档案】后, 将他格式化成为 swap 的格式,最后
将他挂载到系统上即可
o 装置
1. 以『 fdisk /dev/hd[a-d] 』先建立一个 partition,然后,将该 partition 的 ID 改为 82 这一个 swap 的磁盘
档案格式代号
2. 以『 mkswap /dev/hd[a-d][1-16] 』的方式来将您刚刚建置出来的 partition 『格式化为 swap 的档案格式』
3. 以『 swapon /dev/hd[a-d][1-16] 』将 swap 启动
ps:关掉是用swap off
o 档案
1. 以 dd 指令来建立 swapfile ;
2. 以 mkswap 来将 swapfile 格式化为 swap 的档案格式;
3. 以 swapon 来启动该档案,使成为 swap ;
4. 以 swapoff 来关闭该档案!
- ex:面新增 64MB 的虚拟内存
1.使用 dd 这个指令来新增一个 64MB 的档案在 /tmp 底下:
[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
2. 使用 mkswap 将 /tmp/swap 这个档案格式化为 swap 的档案格式:
[root@linux ~]# mkswap /tmp/swap
Setting up swapspace version 1, size = 67096576 bytes
# 请注意,这个指令在下达的时候请『特别小心』,因为下错字元控制,
# 将可能使您的 filesystem 挂掉!
3. 使用 swapon 来将 /tmp/swap 启动
[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
# 如果您需要每次都启动该档案,那么将 swapon /tmp/swap 写入 /etc/rc.d/rc.local 当中即可!
[root@linux ~]# free
total used free shared buffers cached
Mem: 62524 60200 2324 0 716 19492
-/+ buffers/cache: 40024 22500
Swap: 192524 2620 189904
4. 使用 swapoff 关掉 swap file
[root@linux ~]# swapoff /tmp/swap
o 限制
• 最多 32 个
• 总量最大为 64GB
ex:
• 如何增加一颗新的硬盘在你的 Linux 系统当中?请详述流程:
安装硬盘:关掉 Linux 主机电源,调整 Hard Disk 的 Jump (master 或 slave),串接在 IDE 的接口,请注意,留意你
增加的硬盘所串接的 IDE 接口为哪一个插槽,例如你插在 IDE2 的 Master ,则你的硬盘应为 hdc;此外,需要特别留意
的是,目前的机器中,如果是 ATA 66 以上的排线(那种很密的排线),那么 master 或者是 slave 在排在线的顺序是固
定的!底端的是 Mater 而中间的是 Slave ,这点请稍微注意呦! 新增硬件于BIOS:开启计算机后,按 del 键进入 BIOS
,选择 IDE Hard Disk Detector 字样的选项, 让BIOS去捉硬盘,然后再选择 Save and Exit;不过,较新的机器通常都
可以自动侦测了!但是, 如果你的机器是旧型的,那么还是手动来增加硬盘吧! Linux 系统侦测:如果你的 Linux 系统
有启动 kudzu 这个服务时,那么开机就会自动去侦测新的硬件装置! Fedora Core IV 预设是有开启这项服务的,除非你
关掉他了!OK,假设你有开启这项服务,那么开机进入 Linux 的时候,系统会告诉你有捉到一个新的硬件,你可以按
『configure』由系统直接安装即可; 格式化硬盘:以 root 的身份进入 Linux 后,执行以下两个程序:fdisk /dev/hd
[a-d] 与 mke2fs /dev/hd[a-d][1-16] 。 建立 mount point:假设我的这颗硬盘要挂在 /disk3 下面,那么就需要 :
mkdir /disk3 开机自动加载( mount ):再来则是以 vi 修改 /etc/fstab 档案,让每次开机把这个硬盘直接挂入系统中。
安装完成:你可以使用 mount -a 来将全部的装置重新挂载一遍,或者是重新开机就可以啦!
• 假设条件:我原先规划的 /home 只有 1GB ,但是目前的使用者日众,所以容量不足!我想要增加一棵 8GB 的旧硬盘,
要如何作?!
将硬盘加入 Linux 系统中:利用刚刚上一题的方式将你的硬盘加入到 Linux 系统中,亦即是使用 fdisk 与 mke2fs 建立
了 ext2 的档案格式的硬盘!好了,假设该硬盘的代号为 /dev/hdc1 好了! 挂载新硬盘:由于我需要将新旧扇区都挂上来
,这样才有办法将数据由旧硬盘移到新硬盘上面,OK! 我就建立一个暂存的目录,称为 /disk-tmp:
mkdir /disk-tmp mount -t ext2 /dev/hdc1 /disk-tmp
如此一来则 /disk-tmp 就是新挂上来那颗 8 GB 的硬盘啦! 移动数据:好了!现在开始将数据 copy 到新挂上的硬盘上面
吧!
cd /home tar -zcvf /disk-tmp/home.tar.gz * cd /disk-tmp tar -zxvf home.tar.gz
上面的指令会将目前旧有的 /home 底下的东西完全的压缩之后移动到 /disk-tmp/home.tar.gz 这个压缩档,然后再到
/disk-tmp 底下将他解压缩!这样数据就复制到新挂上来的硬盘啦! 卸载旧的,挂上新的:好了,那么我们就开始来测试
一下吧!你可以这样做:
umount /home mount -t ext2 /dev/hdc1 /home
注意呦!如果你的 /home 底下原本就没有挂载扇区的话,那么你就可以直接将 /home 底下的数据都砍掉,然后在挂上新的
那颗硬盘就好了!而 home.tar.gz 这个档案就可以用作为备份之用! 开机执行:同样的,如果要设定成开机就挂上这颗新
的硬盘,那就修改 /etc/fstab 档案吧!
• 如果扇区 /dev/hda3 有问题,偏偏他是被挂载上的,请问我要如何修理此一扇区?
umount /dev/hda3 fsck /dev/hda3
相关文章
- 鸟哥Linux私房菜基础学习篇学习笔记2
- 【鸟哥的linux私房菜-学习笔记】Shell script基础
- 【鸟哥的linux私房菜-学习笔记】档案与文件系统的压缩与打包
- 学习鸟哥私房菜(三)之linux磁盘与文件系统管理
- 《鸟哥Linux私房菜》学习笔记_chap10_磁盘 文件系统管理
- 鸟哥的linux私房菜学习笔记《十二》文件系统与目录树的关系
- 鸟哥的linux私房菜学习笔记《十一》磁盘与文件系统(block与inode)
- 鸟哥的Linux私房菜 基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)
- 鸟哥的Linux私房菜 基础学习篇读书笔记(10):Linux磁盘与文件系统管理(3)
- 鸟哥的linux私房菜——第五章学习(Linux的文件权限与目录配置)