磁盘维护管理(Linux命令操作实例)
一:命令列表
badblocks 检查磁盘坏道情况
dd 用指定大小的块拷贝一个文件(请查阅《命令实例专题02:磁盘维护dd》)
df 检查磁盘空间使用情况
du 统计目录(或文件)所占磁盘空间的大小
e2fsck 检查ext2文件系统的正确性
fsck 检查修复linux文件系统
fdisk 磁盘分区管理
hdparm 检查、设定、优化磁盘参数
mformat 格式化硬盘,建立DOS文件系统
mkdosfs 建立DOS文件系统
mkfs 格式化linux文件系统
mkbootdisk 建立linux目前系统的启动盘
mkswap 设置swap交换分区
mbadblocks 检查MS-DOS文件系统的磁盘是否有损坏的磁区
mount /umount 文件系统挂载/卸载(请查阅《mount设备挂载十例讲解》)
losetup 设定与控制循环设备
quota/ quotaoff 磁盘配额限制设置和查看/关闭
edquota 用于编辑指定用户或工作组磁盘配额
sfdisk 分区操作工具
swapon/ swapoff 交换分区开启/关闭
symlinks 维护符号连接的工具
sync 强制把内存数据写入硬盘
二、实例解说
名称:badblocks
功能:检查磁盘坏道情况
语法:badblocks[-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数][启始区块]
参数:
-b blocksize
指定磁盘的区块大小,单位为字节,默认值为“block 4K ”(4K/block)。
-c blocksize每个区块检查的次数,默认是16次。
-f 强制在一个已经挂载的设备上执行读写或非破坏性的写测试操作
(我们建议先umount设备,然后再进行坏道检测。仅当/etc/mtab出现误报设备挂载错误的时候可以使用该选项)。
-i file 跳过已经显示在file文件中的坏道,而不进行检测(可以避免重复检测)
-o file 把检测结果输出到file文件。
-p number 重复搜寻设备,直到在指定通过次数内都没有找到新的坏块位置,默认次数为0
-s 在检查时显示进度。
-t pattern 通过按指定的模式读写来检测区块。你可以指定一个0到ULONG_MAX-1的十进制正值,或使用random(随机)。
-v 执行时显示详细的信息。
范例:
#检查/sda1分区,检查1次,显示过程,检查结果保存文件
[root@localhost~]# badblocks -v -b 4096 -c 1 /dev/sda1 -o sda1_badblocks_list
名称:du
功能:统计目录(或文件)所占磁盘空间的大小
语法:du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>] [目录或文件]
参数:
-a或-all 为每个指定文件显示磁盘使用情况,或为目录中每个文件显示各自磁盘使用情况。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或–total 除了显示目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或–dereference-args 显示指定符号连接的源文件大小。
-h或–human-readable 以K,M,G为单位,提高信息的可读性。
-H或–si 与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。
-k或–kilobytes 以1024 bytes为单位。
-l或–count-links 重复计算硬件连接的文件。
-L<符号连接>或–dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
-m或–megabytes 以1MB为单位。
-s或–summarize 仅显示总计,即当前目录的大小。
-S或–separate-dirs 显示每个目录的大小时,并不含其子目录的大小。
-x或–one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或–exclude-from=<文件> 在<文件>指定目录或文件。
–exclude=<目录或文件> 略过指定的目录或文件。
–max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
范例:
#1显示一个目录树及其每个子树的磁盘使用情况
[root@localhost~]# du /home/rabbit
#2 要通过以1024字节为单位显示一个目录树及其每个子树的磁盘使用情况
[root@localhost~]# du -k /home/rabbit
#3以MB、GB为单位显示一个目录树及其每个子树的磁盘使用情况
[root@localhost~]# du -m /home/rabbit //MB 磁盘块数
[root@localhost~]# du -g /home/rabbit
#4查看当前目录下所有目录以及子目录的大小
du -h .
du –h /etc //-h表示用K、M、G的人性化形式显示
#5当前目录下user目录的大小,并不想看其他目录以及其子目录:
[root@localhost/]# du -sh root
[root@localhost/]# du -sh etc
#6列出etc目录及其子目录下所有目录和文件的大小
[root@localhost/]# du -ah etc //-a表示包括目录和文件
#7统计深入到第n层目录
[root@localhost/]# du -h –max-depth=0 src
#8列出当前目录中的目录名不包括xyz字符串的目录的大小
[root@localhost /]#du -h –exclude=’*xyz*
名称:e2fsck
功能:检查ext2文件系统的正确性
语法:e2fsck[-acCdfFnprsStvVy][-b <superblock>][-B <区块大小>][-l <文件>][-L<文件>][设备名称]
0 没有任何错误发生。
1 文件系统发生错误,并且已经修正。
2 文件系统发生错误,并且已经修正。
4 文件系统发生错误,但没有修正。
8 运作时发生错误。
16 使用的语法发生错误。
128 共享的函数库发生错误。
参数:
-a 不询问使用者意见,便自动修复文件系统。
-b<superblock> 指定superblock,而不使用预设的superblock。
-B<区块大小> 指定区块的大小,单位为字节。
-c 一并执行badblocks,以标示损坏的区块。
-C 将检查过程的信息完整记录在filedescriptor中,使得整个检查过程都能完整监控。
-d 显示排错信息。
-f 即使文件系统没有错误迹象,仍强制地检查正确性。
-F 执行前先清除设备的缓冲区。
-l<文件> 将文件中指定的区块加到损坏区块列表。
-L<文件> 先清除损坏区块列表,再将文件中指定的区块加到损坏区块列表。因此损坏区块列表的区块跟文件中指定的区块是一样的。
-n 以只读模式开启文件系统,并采取非互动方式执行,所有的问题对话均设置以"no"回答。
-p 不询问使用者意见,便自动修复文件系统。
-r 此参数只为了兼容性而存在,并无实际作用。
-s 如果文件系统的字节顺序不适当,就交换字节顺序,否则不做任何动作。
-S 不管文件系统的字节顺序,一律交换字节顺序。
-t 显示时间信息。
-v 执行时显示详细的信息。
-y 采取非互动方式执行,所有的问题均设置以"yes"回答。
范例:
#检查/dev/sda1分区文件系统
[root@localhost /]# e2fsck -a -c /dev/sda2
名称:fdisk
功能:磁盘分区管理
语法:
1. 输入 m 显示所有命令列示。
2. 输入 p 显示硬盘分割情形。
3. 输入 a 设定硬盘启动区。
4. 输入 n 设定新的硬盘分割区。
4.1. 输入 e 硬盘为[延伸]分割区(extend)。
4.2. 输入 p 硬盘为[主要]分割区(primary)。
5. 输入 t 改变硬盘分割区属性。
6. 输入 d 删除硬盘分割区属性。
7. 输入 q 结束不存入硬盘分割区属性。
8. 输入 w 结束并写入硬盘分割区属性
参数:
范例:
fdisk -l /dev/sda #1观察硬盘之实体使用情形
fdisk /dev/sda #2可进入分割硬盘模式
名称:hdparm
功能:显示与设定硬盘的参数
语法:hdparm[-CfghiIqtTvyYZ] [设备]
参数:
-a<快取分区> 设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定。
-A<0或1> 启动或关闭读取文件时的快取功能。
-c<I/O模式> 设定IDE32位I/O模式。
-C 检测IDE硬盘的电源管理模式。
-d<0或1> 设定磁盘的DMA模式。
-f 将内存缓冲区的数据写入硬盘,并清楚缓冲区。
-g 显示硬盘的磁轨,磁头,磁区等参数。
-h 显示帮助。
-i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。
-I 直接读取硬盘所提供的硬件规格信息。
-k<0或1> 重设硬盘时,保留-dmu参数的设定。
-K<0或1> 重设硬盘时,保留-APSWXZ参数的设定。
-m<磁区数> 设定硬盘多重分区存取的分区数。
-n<0或1> 忽略硬盘写入时所发生的错误。
-p<PIO模式> 设定硬盘的PIO模式。
-P<磁区数> 设定硬盘内部快取的分区数。
-q 在执行后续的参数时,不在屏幕上显示任何信息。
-r<0或1> 设定硬盘的读写模式。
-S<时间> 设定硬盘进入省电模式前的等待时间。
-t 评估硬盘的读取效率。
-T 平谷硬盘快取的读取效率。
-u<0或1> 在硬盘存取时,允许其他中断要求同时执行。
-v 显示硬盘的相关设定。
-W<0或1> 设定硬盘的写入快取。
-X<传输模式> 设定硬盘的传输模式。
-y 使IDE硬盘进入省电模式。
-Y 使IDE硬盘进入睡眠模式。
-Z 关闭某些Seagate硬盘的自动省电功能。
范例:
#1显示硬盘的相关设置
[root@localhost/]# hdparm /dev/sda
#2 .显示硬盘的柱面、磁头、扇区数
[root@localhost/]# hdparm -g /dev/sda
#3评估硬盘的读取效率
[root@localhost/]# hdparm -t /dev/sda
#4硬盘快取的读取效率
[root@localhost/]# hdparm -T /dev/sda
#5检测IDE硬盘的电源管理模式
名称:mkfs
功能:格式化文件系统
语法:mkfs [-V] [-tfstype] [fs-options] filesys [blocks] [-L Lable]
mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。例如,若在"-t" 参数中指定ext2,则mkfs会调用mke2fs来建立文件系统。
参数:
device : 预备检查的硬盘 partition,例如:/dev/sda1
-V : 详细显示模式
-t : 给定档案系统的型式,Linux 的预设值为 ext2
-c : 在制做档案系统前,检查该partition是否有坏轨
-l bad_blocks_file : 将有坏轨的block资料加到bad_blocks_file 里面,block : 给定 block 的大小
-L:建立lable
范例:
#1查看硬盘分区情况
[root@localhost/]# fdisk -l
#2在 /dev/sda12 上建一个msdos 的文件系统,同时检查是否有坏轨存在,并且将过程详细列出来。
[root@localhost/]# mkfs -V -t msdos -c /dev/hda12
#3将sda6分区格式化为ext3格式
[root@localhost/]#mkfs -t ext3 /dev/sda6
mkfs.msdos /dev/sda6 注:把该设备格式化成fat16文件系
mkfs.vfat /dev/sda6 注:把该设备格式化成fat32文件系统
mkfs.reiserfs /dev/sda6 注:把该设备格式化成reiserfs文件系统
mkfs.ext2 /dev/sda6 注:把该设备格式化成ext2文件系统
mkfs.ext3 /dev/sda6 注:把该设备格式化成ext3文件系统
名称:losetup
功能:用于文件、块设备和循环设备的连接及设置,循环设备可把文件虚拟成块设备(Block Device),借以模拟整个文件系统,让用户得以将其视为硬盘、光驱或者软驱等设备,并加载当作目录来使用。
语法:losetup [ -eencryption ] [ -o offset ] loop_device file
losetup [ -d ] loop_device
参数:
-e 表示加密的方式
-o 设置数据偏移量
-d 卸载设备
范例:
#1建立循环设备
//创建空的磁盘镜像文件,这里创建一个1.44M的软盘
[root@localhost/]# dd if=/dev/zero of=floppy.img bs=512 count=2880
使用 losetup将磁盘镜像文件虚拟成快设备
[root@localhost/]# losetup /dev/loop1 floppy.img
//挂载块设备
[root@localhost/]# mount /dev/loop0 /tmp
#1卸载loop设备
[root@localhost /]# umount /tmp
[root@localhost /]# losetup -d /dev/loop1
名称:umount
功能:卸载文件系统
语法:umount[-ahnrvV][-t <文件系统类型>][文件系统]
参数:
a 卸除/etc/mtab中记录的所有文件系统。
-n 卸除时不要将信息存入/etc/mtab文件中。
-r 若无法成功卸除,则尝试以只读的方式重新挂入文件系统。
-t<文件系统类型> 仅卸除选项中所指定的文件系统。
-v 执行时显示详细的信息。
范例:
#1 通过设备名卸载
[root@localhost ~]# umount -v /dev/sda1
#2通过挂载点卸载
umount -v /mnt/mymount/
名称:edquota
功能:用于编辑指定用户或工作组磁盘配额
语法:edquota(选项)(参数)
参数:
-u:设置用户的quota,这是预设的参数;
-g:设置群组的quota;
-p<源用户名称>:将源用户的quota设置套用至其他用户或群组;
-t:设置宽限期限。
范例:
#1一台web虚拟主机服务器:需要对/home分区实现用户级的限制;需要对/www分区进行每个组的用户配额。
//编辑fstab文件
[root@localhost ~]# vim /etc/fstab
//init 6重新启动系统,进入单用户模式,用quotacheck生成.user或.group文件
[root@localhost ~]# quotacheck /home
[root@localhost ~]# quotacheck /var/www
//设置用户和组配额的分配量
[root@localhost ~]# edquota -u rabbit
[root@localhost ~]#edquota -g webterm1
//查看用户磁盘使用情况
[root@localhost ~]# quota -u rabbit
//看某个组的磁盘使用情况
[root@localhost ~]#quota -g webterm1
名称:sfdisk
功能:分区表操作工具
语法:sfdisk [options]device …
参数:
-s [or --show-size]: 显示一个分区的大小
-c [or --id]: 显示或者修改文件系统类型ID
-l [or --list]: 显示每个设备的分区表信息
-d [or --dump]: 同上,但是以一个格式化的方式输出
-i [or --increment]: number cylinders etc.from 1 instead of from 0
-uS, -uB, -uC, -uM: 以扇面/块/柱面数/MB为单位 显示或形成报告
-T [or --list-types]:显示所有已知的sfdisk能辨识的文件系统ID
-D [or --DOS]: 兼容DOS但是会浪费一点磁盘空间
-R [or --re-read]: 让内核重新读取分区表
-N# : 只改变分区的编号 #
-n : 修改但实际上并没有保存到磁盘
-O file : 保存扇面修改并写入分区表文件
-I file : 重新恢复修改的扇面
范例:
#1备份分区表并保存到文件
[root@localhost ~]# sfdisk -d /dev/sda >sda_table
#2从文件中恢复分区表
[root@localhost ~]# sfdisk /dev/sda <sda_table
名称:symlinks
功能:可检查目录中的符号连接,并显示符号连接类型
语法:symlinks[-cdrstv][目录]
参数:
-c 将使用绝对路径的符号连接转换为相对路径。
-d 移除dangling类型的符号连接。
-r 检查目录下所有子目录中的符号连接。
-s 检查lengthy类型的符号连接。
-t 与-c一并使用时,会显示如何将绝对路径的符号连接转换为相对路径,但不会实际转换。
-v 显示所有类型的符号连接。
范例:
#1查看目录下的所有符号链接
[root@localhost ~]#symlinks /etc
[root@localhost ~]# symlinks -r /etc