磁盘的分割、格式化、检验与挂载

我们都知道,在Linux下,想要使用一颗磁盘,那么都必须要经过这几个动作:分割、格式化、(检验)
挂载。

磁盘分区:fdisk

1
2
3
4
5
6
7
[root@www ~]# fdisk [-l] 装置名称
选项与参数:
-l :输出后面接的装置所有的 partition 内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜到的装置的
partition 均列出来。

# 没有加 -l 参数时,直接进行后面接的磁盘的分区操作
[root@www ~]# fdisk /dev/sdc <==将进入对/dev/sdc磁盘的分区操作

磁盘格式化:mkfs

1
2
3
4
5
6
7
8
9
[root@www ~]# mkfs [-t 文件系统格式] 装置文件名
选项与参数:
-t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)

[root@www ~]# mkfs -t ext3 /dev/hdc6

# 按下两个[tab],会发现 mkfs 支持的文件格式如下所示!可以格式化 vfat !
[root@www ~]# mkfs[tab][tab]
mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.msdos mkfs.vfat

mkfs命令会将每一种文件系统的参数都给默认化,如果需要自己加入参数,那么可以使用mke2fs命令

1
2
3
4
5
6
7
8
9
10
[root@www ~]# mke2fs [-b block大小] [-i block大小] [-L 标头] [-cj] 装置
选项与参数:
-b :可以设定每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种;
-i :多少容量给予一个 inode 呢?
-c :检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试; 如果下达两次 -c -c 癿话,会测试读写(read-write)
会很慢~
-L :后面可以接标头名称 (Label),这个 label 是有用的喔!
-j :本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3。

[root@www ~]# mke2fs -j -L "vbird_logical" -b 2048 -i 8192 /dev/hdc6

磁盘检验: fsck, badblocks

fsch是用来检查与修正文件系统错误的指令。注意:通帯只有身为 root 的文件系统有问题的时候才使用这个指令,否则在正常状况下使用此一指令, 可能会造成对系统的危害!通帯使用这个指令的场合都是在系统出现极大的问题,导致你在 Linux 开机的时候得进入单人单机模式下进行维护的行为时,才必项使用此指令!

此外,由于 fsck 在扫瞄硬盘的时候,可能会造成部分 filesystem
的损坏,所以『执行 fsck 时, 被检查的 partition 务必不可挂载到系统上!亦即是需要在卸除的状态!』

ext2/ext3文件系统的最顶层(就是挂载点那个目录底下)会存在一个『lost+found』的目录吧! 该目录就是在当你使用 fsck 检查文件系统后,若出现问题时,有问题的数据会被放置到这个目录中!所以理论上这个目录不应该会有任何数据,若系统自动产生数据在里面,那…你就得特别注意你的文件系统!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@www ~]# fsck [-t 文件系统] [-ACay] 装置名称
选项与参数:
-t :如同 mkfs 一样,fsck 也是个综合软件而已!因此我们同样需要指定文件系统。
不过由于现今的 Linux 太聪明了,他会自动的透过 superblock 去分辨文件系统, 因此通常可以不需要这个选顷!
-A :依据 /etc/fstab 癿内容,将需要的装置扫瞄一次。通常开机过程中就会执行此指令了。
-a :自动修复检查到的有问题的扇区,所以你不用一直按 y !
-y :与 -a 类似,但是某些 filesystem 仅支持 -y 这个参数!
-C :可以在检验的过程当中,使用一个直方图来显示目前的进度!
EXT2/EXT3 的额外选项功能:(e2fsck 指令所提供)
-f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入细部检查的,
如果您想要强制 fsck 进入细部检查,就得加上 -f 旗标!
-D :针对文件系统下的目录进行优化配置。

范例一:强制的将前面我们建立的 /dev/hdc6 这个装置给他检验一下!
[root@www ~]# fsck -C -f -t ext3 /dev/hdc6
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks
# 如果没有加上 -f 的选项,则由于这个文件系统不曾出现问题,
# 检查的经过非常的快速!若加上 -f 强制检查,才会一项一项的显示过程。

范例二:系统有多少文件系统支持的 fsck 软件?
[root@www ~]# fsck[tab][tab]
fsck fsck.cramfs fsck.ext2 fsck.ext3 fsck.msdos fsck.vfat

刚刚谈到的 fsck 是用来检验文件系统是否出错,至于badblocks 则是用来检查硬盘软软盘扇区有没有坏轨的! 由与这个指令其实可以透过『 mke2fs -c 装置文件名 』在进行格式化的时候处理磁盘表面的读取测试, 因此目前大多不使用这个指令!

1
2
3
4
5
6
7
8
9
[root@www ~]# badblocks -[svw] 装置名称
选项与参数:
-s :在屏幕上列出进度
-v :可以在屏幕上看到进度
-w:使用写入癿方式来测试,建议不要使用此一参数,尤其是待检查的装置已有档案时!
[root@www ~]# badblocks -sv /dev/hdc6
Checking blocks 0 to 2008093
Checking for bad blocks (read-only test): done
Pass completed, 0 bad blocks found.

磁盘挂载与卸除

以下列出磁盘挂载的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
范例一:将刚刚建立的 /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)

另外,我们也可以利用 mount 来将某个目录挂载到另外一个目录去!这并不是挂载文件系统,而是额外挂载某个目录的方法! 虽然底下的方法也可以使用 symbolic link 来连结,不过在某些不支持符号链接的程序运作中,还是得要透过这样的方法才行。

1
2
3
4
5
6
7
8
范例七:将 /home 这个目录暂时挂载到 /mnt/home 底下:
[root@www ~]# mkdir /mnt/home
[root@www ~]# mount --bind /home /mnt/home
[root@www ~]# ls -lid /home/ /mnt/home
2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home/
2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /mnt/home
[root@www ~]# mount -l
/home on /mnt/home type none (rw,bind)

从此进入 /mnt/home 就是进入 /home !

利用umount可以卸载装置

1
2
3
4
[root@www ~]# umount [-fn] 装置文件名戒挂载点
选项与参数:
-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情冴下;
-n :不更新 /etc/mtab 情况下卸除。

执行该指令时,必须保证所挂载的装置处于不使用状态,否则的话,卸载不成:

1
2
3
4
5
[root@www ~]# mount /dev/cdrom /media/cdrom
[root@www ~]# cd /media/cdrom
[root@www cdrom]# umount /media/cdrom
umount: /media/cdrom: device is busy
umount: /media/cdrom: device is busy

开机挂载 /etc/fstab 及 /etc/mtab

开机自动挂载涉及到/etc/fstab文件,该文件的内容如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@www ~]# cat /etc/fstab
# Device Mount point filesystem parameters dump fsck
LABEL=/1 / ext3 defaults 1 1
LABEL=/home /home ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-hdc5 swap swap defaults 0 0

# 第一列表示的是磁盘装置文件名(如/dev/sha1)或是该装置的Label
# dump 表示的是文件系统需不需要备份,0表示不需要,1表示每天进行dump备份,2表示不定日期的备份
# fsck开机时是否检查文件系统是否完整,0表示不需要,1表示最早检查(一般只有根目录会设为1),
# 2也表示检查,只不过会在1检查完后再检查2。

/etc/fstab 是开机时的配置文件,不过,实际 filesystem 的挂载是记录到和不 /proc/mounts 这两个档案当中的。每次我们在更动 filesyste的 挂载时,也会同时更动这两个档案!但是,万一发生您在 /etc/fstab 输入的数据错误,导致无法顺利开机成功,而进入单人维护模式当中,那时候的 / 可是 read only 的状态,当然您就无法修改 /etc/fstab ,也无法更新 /etc/mtab 那怎么办? 没关系,可以利用底下这一招:

1
2
# 重新挂载根目录,修改挂载的参数,使得根目录可以进行读写操作
[root@www ~]# mount -n -o remount,rw /