6.1 任务1 熟练使用常用磁盘管理工具
在安装Linux系统时,其中有一个步骤是进行磁盘分区。在分区时可以采用Disk Druid、RAID和LVM等方式进行分区。除此之外,在Linux系统中还有fdisk、cfdisk、parted等分区工具。
注意:下面所有的命令都以新增一块SCSI硬盘为前提,新增的硬盘为/dev/sdb。请在开始本任务前在虚拟机中增加该硬盘。
1.fdisk
fdisk磁盘分区工具在DOS、Windows和Linux中都有相应的应用程序。在Linux系统中,fdisk是基于菜单的命令。用fdisk对硬盘进行分区,可以在fdisk命令后面直接加上要分区的硬盘作为参数,例如,对新增加的第二块SCSI硬盘进行分区的操作如下所示:
[root@RHEL6~]# fdisk /dev/sdb Command (m for help):
在command提示后面输入相应的命令来选择需要的操作,输入m命令可列出所有可用命令。表6-1所示是fdisk命令选项的说明。
表6-1 fdisk命令选项
下面以在/dev/sdb硬盘上创建大小为500MB、文件系统类型为ext3的/dev/sdb1主分区为例,讲解fdisk命令的用法。
(1)利用如下命令打开fdisk操作菜单。
[root@RHEL6~]# fdisk /dev/sdb Command (m for help):
(2)输入p命令,查看当前的分区表。从命令执行结果可以看到,/dev/sdb硬盘并无任何分区。
//利用p命令查看当前分区表 Command (m for help): p Disk /dev/sdb: 1073 MB, 1073741824 bytes 255 heads, 63 sectors/track, 130 cylinders Units =cylinders of 16065* 512 =8225280 bytes Device Boot Start End Blocks Id System Command (m for help):
以上显示了/dev/sdb的参数和分区情况。/dev/sdb大小为1073MB,磁盘有255个磁头、130个柱面,每个柱面有63个扇区。从第4行开始是分区情况,依次是分区名、是否为启动分区、起始柱面、终止柱面、分区的总块数、分区ID、文件系统类型。例如,下面所示的/dev/sda1分区是启动分区(带有*号)。起始柱面是1,结束柱面为12,分区大小是96358块(每块的大小是1024个字节,即总共有100MB左右的空间)。每柱面的扇区数等于磁头数乘以每柱扇区数,每两个扇区为1块,因此分区的块数等于分区占用的总柱面数乘以磁头数,再乘以每柱面的扇区数后除以2。例如:/dev/sda2的总块数=(终止柱面44-起始柱面13+1)×255×63/2=257040。
[root@RHEL6~]#fdisk /dev/sda Command (m for help): p Disk /dev/sda: 6442 MB, 6442450944 bytes 255 heads, 63 sectors/track, 783 cylinders Units =cylinders of 16065* 512 =8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 12 96358+ 83 Linux /dev/sda2 13 44 257040 82 Linux swap /dev/sda3 45 783 5936017+ 83 Linux
(3)输入n,创建一个新分区。输入p,选择创建主分区(创建扩展分区可输入e,创建逻辑分区可输入l);输入数字1,创建第一个主分区(主分区和扩展分区可选数字为1~4,逻辑分区的数字标识从5开始);输入此分区的起始、结束扇区,以确定当前分区的大小。也可以使用+sizeM或者+sizeK的方式指定分区的大小。操作如下所示:
Command (m for help): n //利用n命令创建新分区 Command action e extended p primary partition (1-4) p //输入p命令,以创建主磁盘分区 Partition number (1-4): 1 First cylinder (1-130, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-130, default 130): +500M
(4)输入l可以查看已知的分区类型及其id,其中列出ext的id为83。输入t,指定/dev/sdb1的文件系统类型为ext3。命令如下所示:
//设置/dev/sdb1分区类型为ext3 Command (m for help): t Selected partition 1 Hex code (type L to list codes): 83
提示:如果不知道ext类型的id是多少,可以在上面输入L命令查找。
(5)分区结束后,输入w,把分区信息写入硬盘分区表并退出。
(6)如果要删除磁盘分区,在fdisk菜单下输入d,并选择相应的磁盘分区即可。删除后输入w,保存命令并退出。
//删除/dev/sdb1分区,保存退出 Command (m for help): d Partition number (1-4): 1 Command (m for help): w
2.kfs
硬盘分区后,下一步的工作就是文件系统的建立。类似于Windows下的格式化硬盘。在硬盘分区上建立文件系统会冲掉分区上的数据,而且不可恢复,因此在建立文件系统之前要确认分区上的数据不再使用。建立文件系统的命令是mkfs,格式如下:
mkfs [参数] 文件系统
mkfs命令常用的参数选项如下。
•-t:指定要创建的文件系统类型。
•-c:建立文件系统前首先检查坏块。
•-l file:从文件file中读磁盘坏块列表,file文件一般是由磁盘坏块检查程序产生的。
•-V:输出建立文件系统的详细信息。
例如,在/dev/sdb1上建立ext3类型的文件系统,建立时检查磁盘坏块并显示详细信息。命令如下所示:
[root@RHEL6~]# mkfs -t ext3-V -c /dev/sdb1
在软盘上建立文件系统,一般采用以下步骤。
(1)对软盘格式化。
[root@RHEL6~]# fdformat -n /dev/fd0
(2)使用badblocks命令检查软盘上的坏块,把坏块信息存储在badblock-fd0文件中。
[root@RHEL6~]# badblocks /dev/fd01440>badblock-fd0
(3)用mkfs命令建立文件系统。
[root@RHEL6~]# mkfs -t ext3-l badblock-fd0 /dev/fd0
3.fsck
fsck命令主要用于检查文件系统的正确性,并对Linux磁盘进行修复。fsck命令的格式如下:
fsck [参数选项] 文件系统
fsck命令常用的参数选项如下。
•-t:给定文件系统的类型,若在/etc/fstab中已有定义或kernel本身已支持,不需添加此项。
•-s:逐条执行fsck命令以进行检查。
•-A:对/etc/fstab中所有列出来的分区进行检查。
•-C:显示完整的检查进度。
•-d:列出fsck的debug结果。
•-P:在同时有-A选项时,多个fsck的检查一起执行。
•-a:如果检查中发现错误,则自动修复。
•-r:如果检查有错误,询问是否修复。
例如,检查/dev/sdb1分区上是否有错误,如果有错误则自动修复。
[root@RHEL6~]# fsck -a /dev/sdb1 fsck 1.35 (28-Feb-2004) /dev/sdb1: clean, 11/26104 files, 8966/104388 blocks
4.dd
dd命令用于将指定的输入文件复制到指定的输出文件上,并且在复制过程中可以进行格式转换。dd命令与cp命令的区别在于:dd命令可以在没有创建文件系统的软盘上进行,复制到软盘的数据实际上是镜像文件。类似于DOS中的diskcopy命令的作用。dd命令的格式为:
dd [<if=输入文件名/设备名>] [<of=输出文件名/设备名>] [bs=块字节大小] [count=块 数]
下面通过几个例子讲解dd命令的使用方法。
(1)把一张软盘中的内容复制到另一张软盘上,使用/data/fd0data作为临时存储区。
• 首先,把源盘插入驱动器,输入下列命令:
[root@RHEL6~]# dd if=/dev/fd0 of=/data/fd0data
• 完成复制后,将源盘从驱动器中取出,插入目标盘,输入下列命令:
[root@RHEL6~]# dd if=/data/fd0data of =/dev/fd0
• 软盘复制完成后,使用下列命令删除临时文件:
[root@RHEL6~]# rm /data/fd0data
(2)把net.i文件写入软盘,并设定读/写缓冲区的数目(软盘中原来的数据将被覆盖)。命令如下:
[root@RHEL6~]# dd if=net.i of=/dev/fd0 bs=16384
(3)把file1文件复制为file2文件:
[root@RHEL6~]# dd if=file1 of=file2
(4)建立和使用交换文件:
当系统的交换分区不能满足系统的要求而磁盘上又没有可用空间时,可以使用交换文件提供虚拟内存。
[root@RHEL6~]# dd if=/dev/zero of=/swap bs=1024 count=10240
上述命令的结果在硬盘的根目录下建立了一个块大小为1024字节、块数为10240的名为swap的交换文件。该文件的大小为1024×10240=10MB。
建立/swap交换文件后,使用mkswap命令说明该文件用于交换空间。
[root@RHEL6~]# mkswap /swap 10240
利用swapon命令可以激活交换空间,也可以利用swapoff命令卸载被激活的交换空间。
[root@RHEL6~]# swapon /swap [root@RHEL6~]# swapoff /swap
5.df
df命令用来查看文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,以及目前还有多少空间等信息,还可以利用该命令获得文件系统的挂载位置。
df命令格式如下:
df [参数选项]
df命令的常见参数选项如下。
•-a:显示所有文件系统磁盘的使用情况,包括0块的文件系统,如/proc文件系统。
•-k:以k字节为单位显示。
•-i:显示i节点信息。
•-t:显示各指定类型的文件系统的磁盘空间使用情况。
•-x:列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。
•-T:显示文件系统的类型。
例如,列出各文件系统的占用情况:
[root@RHEL6~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 5842664 2550216 2995648 46% / /dev/sda1 93307 8564 79926 10% /boot none 63104 0 63104 0% /dev/shm
列出各文件系统的i节点的使用情况:
[root@RHEL6~]# df -ia Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 743360 130021 613339 18% / none 0 0 0 - /proc usbfs 0 0 0 - /proc/bus/usb /dev/sda1 24096 34 24062 1% /boot none 15776 1 15775 1% /dev/shm nfsd 0 0 0 - /proc/fs/nfsd
列出文件系统的类型:
[root@RHEL6~]#df -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sda3 ext3 5842664 2550216 2995648 46% / /dev/sda1 ext3 93307 8564 79926 10% /boot none tmpfs 63104 0 63104 0% /dev/shm
6.du
du命令用于显示磁盘空间的使用情况。该命令逐级显示指定目录的每一级子目录占用文件系统数据块的情况。du命令的语法如下:
du [参数选项] [文件或目录名称]
du命令的参数选项如下。
•-s:对每个name参数只给出占用的数据块总数。
•-a:递归显示指定目录中及子目录中各文件占用的数据块数。
•-b:以字节为单位列出磁盘空间的使用情况(默认以KB为单位)。
•-k:以1024字节为单位列出磁盘空间的使用情况。
•-c:在统计后加上一个总计(系统的默认设置)。
•-l:计算所有文件的大小,对硬链接文件重复计算。
•-x:跳过在不同文件系统上的目录且不予统计。
例如,以字节为单位列出所有文件和目录的磁盘空间占用情况。命令如下所示:
[root@RHEL6~]# du -ab
7.mount与umount
1)mount
在磁盘上建立好文件系统之后,还需要把新建立的文件系统传到系统上才能使用,这个过程称为挂载,文件系统所挂载到的目录被称为挂载点(mount point)。Linux系统中提供了/mnt和/media两个专门的挂载点。一般而言,挂载点应该是一个空目录,否则目录中原来的文件将被系统隐藏。通常将光盘和软盘挂载到/media/cdrom(或者/mnt/cdrom)和/media/floppy(或者/mnt/floppy)中,其对应的设备文件名分别为/dev/cdrom和/dev/fd0。
文件系统的挂载可以在系统引导过程中自动挂载,也可以手动挂载,手动挂载文件系统的挂载命令是mount。该命令的语法格式如下:
mount 选项 设备 挂载点
mount命令的主要选项如下。
•-t:指定要挂载的文件系统的类型。
•-r:如果不想修改要挂载的文件系统,可以使用该选项以只读方式挂载。
•-w:以可写的方式挂载文件系统。
•-a:挂载/etc/fstab文件中记录的设备。
把文件系统类型为ext3的磁盘分区/dev/sda2挂载到/media/sda2目录下,可以使用如下命令:
[root@RHEL6~]# mount -t ext3 /dev/sda2 /media/sda2
挂载光盘到/media/cdrom目录(该目录已提前建立好)可以使用下列命令:
[root@RHEL6~]# mount -t iso9660 /dev/cdrom /media/cdrom
或者使用下面的命令也可以完成光盘的挂载:
[root@RHEL6~]#mount /dev/cdrom /media/cdrom
挂载软盘可以使用下列命令:
[root@RHEL6~]# mount -t vfat /dev/fd0 /media/floppy
或者使用下面的命令也可以完成软盘的挂载:
[root@RHEL6~]# mount /dev/fd0 /media/floppy
2)umount
文件系统可以被挂载也可以被卸载。卸载文件系统的命令是umount。umount命令的格式为:
umount 设备 挂载点
例如,卸载光盘和软盘可以使用命令:
[root@RHEL6~]# umount /dev/cdrom /media/cdrom
或者
[root@RHEL6~]# umount /dev/cdrom
或者
[root@RHEL6~]# umount /media/cdrom
卸载软盘:
[root@RHEL6~]# umount /media/floppy
注意:光盘在没有卸载之前无法从驱动器中弹出。正在使用的文件系统不能卸载。
8.文件系统的自动挂载
如果要实现每次开机自动挂载文件系统,可以通过编辑/etc/fstab文件来实现。在/etc/fstab中列出了引导系统时需要挂载的文件系统以及文件系统的类型和挂载参数。系统在引导过程中会读取/etc/fstab文件,并根据该文件的配置参数挂载相应的文件系统。以下是一个fstab文件的内容:
[root@RHEL6~]# cat /etc/fstab #This file is edited by fstab-sync-see 'man fstab-sync' for details LABEL=/ / ext3 defaults 1 1 LABEL=/boot /boot ext3 defaults 1 2 none /dev/pts devpts gid=5, mode=620 0 0 none /dev/shm tmpfs defaults 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0 LABEL=SWAP-sda2 swap swap defaults 0 0 /dev/sdb2 /media/sdb2 ext3 rw, grpquota, usrquota 0 0 /dev/hdc /media/cdrom auto pamconsole, exec, noauto, managed 0 0 /dev/fd0 /media/floppy auto pamconsole, exec, noauto, managed 0 0
/etc/fstab文件的每一行代表一个文件系统。每一行又包含6列,这6列的内容如下所示:
fs_spec fs_file fs_vfstype fs_mntops fs_freq fs_passno
具体含义如下。
fs_spec:将要挂载的设备文件。
fs_file:文件系统的挂载点。
fs_vfstype:文件系统的类型。
fs_mntops:挂载选项,决定传递给mount命令时如何挂载,各选项之间用逗号隔开。
fs_freq:由dump程序决定文件系统是否需要备份,0表示不备份,1表示备份。
fs_passno:由fsck程序决定引导时是否检查磁盘以及检查次序,取值可以为0、1、2。
例如,如果实现每次开机自动将文件系统类型为vfat的分区/dev/sdb3自动挂载到/media/sdb3目录下,需要在/etc/fstab文件中添加下面一行内容,重新启动计算机后,/dev/sdb3就能自动挂载了。
/dev/sdb3 /media/sdb3 vfat defaults 0 0