[TOC]
0x00 快速入门 描述:主要针对于硬盘进行挂载/格式化、查看等等的命令;
挂载命令:相当于win中的分配盘符,只不过linux中叫挂载,查询与自动挂载。
硬盘分区与格式化概述  总结:主分区(primary partition)和扩展分区(extended partition)总是不能超过4个,扩展分区只有一个/扩展分区不能直接存储数据,最好是保持原有的Disk,添加新的Disk.
@在Vmware中添加硬盘(注:必须power off,因为VM不支持热启动) 编辑虚拟机 > 添加硬盘 > 创建新虚拟磁盘 > SCSI(接口)
MBR分区与GPT分区的差异: 
分区模式之MBR:主分区不超过4个 / 单个分区容量最大2TB 
分区模式之GPT:主分区个数『几乎』没有限制单个分区容量『几乎』没有限制但,GPT主分区中不适合安装X86构架的系统 
 
磁盘大小转换: 1 EB = 1024 PB = 1024X1024 TB = 1024x1024X1024 GB
 
0x01 磁盘查看与挂载 blkid 命令 描述:查看当前分区的文件系统(xfs、ext2/3/4)格式,是定位或打印块设备属性的命令行实用工具。
它利用 libblkid 库在 Linux 系统中获得到磁盘分区的 UUID。
实际案例:1 2 3 4 5 $ blkid /dev/vda1: UUID="59d9ca7b-4f39-4c0c-9334-c56c182076b5"  TYPE="ext4"  $ blkid /dev/vda1 /dev/vda1: UUID="59d9ca7b-4f39-4c0c-9334-c56c182076b5"  TYPE="ext4"  
lsblk 命令 描述: lsblk命令用于列出所有有关可用或指定块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息;它还会进行命令读取 sysfs 文件系统和 udev 数据库以收集信息。
块设备有硬盘,闪存盘,cd-ROM等
lsblk命令包含在util-linux-ng包中,现在该包改名为util-linux是生成UUID的包;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 yum instakk util-linux    sudo yum install util-linux-ng  -a, --all            显示所有设备。 -b, --bytes          以bytes方式显示设备大小。 -d, --nodeps         不显示 slaves 或 holders。 -D, --discard        print  discard capabilities。 -e, --exclude <list> 排除设备 (default: RAM disks)。 -f, --fs             显示文件系统信息。 -h, --help            显示帮助信息。 -i, --ascii          use ascii characters only。 -m, --perms          显示权限信息。 -l, --list           使用列表格式显示。 -n, --noheadings     不显示标题。 -o, --output <list>  输出列。 -P, --pairs          使用key="value" 格式显示。 -r, --raw            使用原始格式显示。 -t, --topology       显示拓扑结构信息。 
实际示例: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 30 $lsblk NAME:这是块设备名。 MAJ:MIN:本栏显示主要和次要设备号。 RM:本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。 SIZE:本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。 RO:该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。 TYPE:本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。 MOUNTPOINT:本栏指出设备挂载的挂载点。 $lsblk  -alnvda  253:0    0  40G  0 disk vda1 253:1    0  40G  0 part / $lsblk  -o name,mountpoint,size,uuidNAME            MOUNTPOINT  SIZE UUID sda                          40G |-sda1          /boot         1G b379c221-7e3d-42ff-b5ae-bf1d2dfe9ffb 
注意事项:
如果udev 数据库不可用或者编译的 lsblk 不支持 udev,它会试图从块设备中读取卷标、UUID 和文件系统类型。
这种情况下必须以 root 身份运行,该命令默认会以类似于树的格式打印出所有的块设备(RAM 盘除外)。 
 
 
 
df 命令 描述:查看磁盘分区的使用状况;1 2 3 4 5 6 7 8 9 df [选项] -l 仅显示本地磁盘(默认) -a 显示所有文件系统的磁盘使用情况,包含比如/proc/ -h 以1024进制计算最合适的单位显示磁盘容量(以人类方式展现) -H 以1000进制计算最合适的单位显示磁盘容量 -T 显示磁盘分区类型 -t 显示指定类型文件系统的磁盘分区,如df -t ext4 -x 不显示指定类型文件系统的磁盘分区 
实际案例:1 2 3 4 5 6 7 8 9 10 df -alhT df -t xfs  df -x tmpfs 
                 
                weiyigeek.top-示例2.
             
du 命令 描述:统计磁盘上的文件大小 基础语法:1 2 3 4 5 6 7 8 9 du 【选项】 -b 以byte为单位统计文件 -k 以KB为单位统计文件 (DEFAULT) -m 以MB为单位统计文件 -h 按照1024进制以最合适的单位统计文件 -H 按照1000进制以最合适的单位统计文件 -s 指定统计目标,如du -s ~/desktop,可以查看destop目录的大小 
实际案例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 du -s /home du -sm /home  du -sh /home  $du  -h Github/du -h --max-depth=1 webapp/ /nfs/data$ du -h --max-depth=1 *             
ncdu 命令 描述:它是基于ncurses库开发的,因此还支持很多丰富的交互式命令; ncdu命令是对传统du命令功能上的增强(替代du命令的工具),不需要像du那样输入大量的命令,就可以计算文件及目录大小并可以按照大小或文件名进行排序;它还提供了许多操作文件和文件夹的选项-导航,排序甚至删除:
安装ncdu:
基础语法(使用贴近VIM):1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 up,k - 用于向上移动光标 down,j - 用于向下移动光标 右键,l> - 打开所选目录 left,<,h - 这将打开父目录 c - 切换子项目计数的显示 e - 显示/隐藏隐藏或排除的文件 n - 按名称排序(再次按降序排列) m - 切换最新时间显示(-e标志) s - 按文件大小排序(再次按降序排列) d - 删除所选文件或目录 g - 显示百分比和/或图表 t - 排序时在文件之前切换dirs  b - 当前目录中的Spawn shell i - 显示有关所选项目的信息 r - 刷新/重新计算当前目录 q - 退出ncdu 一个整数和可选的单元(例如:10K是10 * 1024)。单位是`K,M,G,T,P,E,Z,Y(1024功率)或KB,MB,...`(1000功率)。 
基础实例:1 2 3 4 5 6 7 $ncdu  1.14.2 ~ Use the arrow keys to navigate, press ? for  help --- /root      1.5 MiB [ 88.9%    116.0 KiB [  6.7%           ] /.nvm    24.0 KiB [  1.4%           ]  .bash_history    12.0 KiB [  0.7%           ]  .viminfo     4.0 KiB [  0.2%           ]  anaconda-ks.cfg 
mount 命令 描述:用于加载文件系统到指定的加载点。 此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux mount命令来手动完成挂载。
基础语法:1 2 3 4 5 6 7 8 9 10 11 12 13 mount【-t 文件系统】【-o 特殊选项】设备文件名 挂载点 -t 文件系统 加入文件系统类型来指定挂载的类型,可以ext3,ext4,iso9660等文件系统 -o 特殊选项 可以指定挂载的额外选项有各种参数,可多个一起,用逗号隔开特别看下这个exec /noexec,代表执行/不执行,设定是否允许在文件系统中执行可执行文件,默认是exec 文件 -V:显示程序版本; -l:显示已加载的文件系统列表; -h:显示帮助信息并退出; -v:冗长模式,输出指令执行的详细信息; -n:加载没有写入文件“/etc/mtab”中的文件系统; -r:将文件系统加载为只读模式; -a:加载文件“/etc/fstab”中描述的所有文件系统。 
_ 实际案例:_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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 $ mount $ df | mount -l | cat /etc/mtab    $ mount -t auto /dev/cdrom /mnt/cdrom   mount -t vfat /dev/sdb1 /mnt/usb        mount -t nfs 192.168.1.1:/nfs /files    mount -t swap mount -t cifs mount -t iso9660 mount -a  echo  "/dev/sdb1 /nfs-file ext4 defaults 0 0"  >> /etc/fstab设备名称   挂载目录  文件系统  挂载参数(rwx) 备份信息  启动顺序       /dev/sdb /mnt/imooc ext3 defaults 0 0                                UUID=b379c221-7e3d-42ff-b5ae-bf1d2dfe9ffb /boot   xfs  defaults 0 0  /dev/hda1  /   ext3   errors=remount-ro   0 1                        192.168.172.65:/files /mnt/share  cifs defaults,username=test ,password=test  0 0 mount -o remount,noexec /home/        mount -o remount,acl /       mount -o remount,ro /dev/partition    mount -o loop kali.iso /media/cdrom   $lsblk mkdir /mnt/cdrom/ && mount -t iso9660 /dev/sr0 /mnt/cdrom  ls /mnt/cdrom  $sudo  mount -t smbfs -o username=user,password=123456 //218.*.*.*/Share /mnt
 !()[https://images2017.cnblogs.com/blog/1216496/201708/1216496-20170826153450824-1775132428.png] 
补充说明: 
umount 命令 描述:该命令是设备文件名或挂载点进行挂载设备的卸载; Tips:在Linux中一定!!要执行此命令,才能正常取出光盘,如果显示device is busy(设备正忙),原因可能是你当前目录正是当前目录或者正在对其读写(所有一定要退出挂载目录才执行);
基础示例1 2 3 4 5 6 umount /dev/sr0 umount /mnt/cdrom umount -lf /data 
所遇问题: 
问题1.磁盘umount时提示Structure needs cleaning问题处理;  问题信息:mount /dev/dm0 on /mnt failed Structure needs cleanning!在对docker容器进行删除的时候提示无法删除,结构需要清理 问题原因:停止docker服务,卸载文件系统,进行文件修复,由于使用的是ext4格式,所以使用 fsck.ext4(一般情况修复后均可挂载) 解决办法:1 2 3 4 5 6 7 8 9 1.首先查看/dev/md0是什么文件系统? 2.此处假如是ext4文件系统则使用 fsck.ext4 /dev/md0 命令进行修复 3.如果是xfs文件系统使用命令 xfs_repair -L /dev/md0修复 /dev/mapper/dockervg-dockerlv  fsck.ext4 /dev/mapper/dockervg-dockerlv -y 
 
注意事项:如果磁盘有问题或者阵列出问题时此种修复可能会失败,挂载时依然要求格盘那就果断的格盘吧。 
 
sync 命令 功能说明:将内存缓冲区内的数据写入磁盘。 语  法:sync [–help][–version] 补充说明:在Linux系统中,当数据需要存入磁盘时,通常会先放到缓冲区内,等到适当的时刻再写入磁盘,如此可提高系统的执行效率。
基础用法:
PS: 实际上sync命令可供普通账号使用只不过一般账号用户所更新的磁盘数据就仅有自己的数据,不像root可以更新整个系统中的数据了;
 
0x02 磁盘分区与格式化 fdisk 命令 描述:查看磁盘与磁盘分区格式化,主要运用与MBR分区即磁盘2T容量以下;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 a切换一个可引导的标志 = toggle a bootable flag b编辑bsd磁盘标签  = edit bsd disklabel c切换dos兼容性标志 = toggle the dos compatibility flag d删除一个分区 = delete a partition g创建一个新的空GPT分区表 = create a new empty GPT partition table G创建一个IRIX(SGI)分区表 = create an IRIX (SGI) partition table l列出已知的分区类型 = list known partition types m打印这个菜单 = help  n添加一个新的分区 =  add a new partition o创建一个新的空DOS分区表 = create a new empty DOS partition table p打印分区表 = print  the partition table q不保存更改就退出 = quit without saving changes s创建一个新的空Sun磁盘标签 = create a new empty Sun disklabel t改变分区的系统id = change a partition's system id'  u改变显示/输入单元 = change display/entry units v验证分区表 = verify the partition table w将表写入磁盘和退出 = write and exit  x额外的功能(专家) = extra functionality (experts only) 
 
实际案例: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 30 31 32 33 34 35 $fdisk  -lfdisk /dev/sdb  输入d即可,之后选择分区符号; 
如何为硬盘添加swap交换分区以文件形式? 1 2 3 4 5 6 7 $fdisk  /dev/sbdp  t  L  p  w  
注意事项: 
Linux不支持NTFS文件系统!!
Linux不像win需要一个一个安装驱动,它会一次性将所有能够认识的驱动全都放在内核里,但由于这样做的消耗太大,所以很多不会经常用的驱动就没有加载,比如NTFS你需要进行内核编译,但此工作量太大,一般在工作中也不需要使用除非做的是安卓之类的开发。 
解决方法是:搜索ntfs-3g安装,这样linux就会支持NTFS;实际上真正要进行文件的传输,不会使用U盘和光盘,而是通过网络传输. 
 
 
注意:fdisk操作的磁盘空间不能超过2TB; 
 
parted 命令 描述:parted既可以进行MBR分区,也可以进行GPT分区非常强大(推荐),它也同fdisk一样有两种模式即交互和命令模式不同于fdisk的是它在退出时候将自动生效;
基础参数:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 align-check   帮助(命令)打印通用帮助,或者帮助命令 mklabel,mktable LABEL-TYPE创建一个新的磁碟标签(分区表) mkpart部件类型(FS-TYPE)开始结束做一个分区 name NUMBER NAME  print  打印(设备| |自由列表,所有|数字)显示分区表,可用设备,自由的空间,发现所有分区,或特定的分区quit 退出退出程序 rescue 开始结束救援在开始和结束时失去的分区 rm号码删除分区号 select 选择设备选择要编辑的设备 disk_set 船旗国改变选定的设备上的国旗 disk_toggle [标记]选择设备上切换的状态的标志 set  NUMBER FLAG STATE  更改分区号上的标记toggle [NUMBER [FLAG]] 切换状态的国旗插在分区号 unit UNIT  将默认单元设置为单元 select /dev/sdc  mklabel gpt  mklabel msdos  print  print  all 
实际案例: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 30 31 32 33 34 $parted (parted) print  (parted) rm 1   (parted) unit GB  (parted) quit    (parted) mkpart primary   (parted) mkpart PART-TYPE [FS-TYPE] START END (parted) mkpart extension 0 100% (parted) mkpart test  2000 3000  (parted) mkpart next 2500 3500   parted /dev/sdb (parted) mklable gpt 
mkswap 命令 描述:采用该命令进行格式化swap分区,还能采用swapon与swapoff来启用或者停用交换分区
实际案例:1 2 3 mkswap /dev/sdb6   swapon /dev/sdb6  swapoff /dev/sdb6  
swapoff 命令  功能说明:关闭系统交换区(swap area)。 语  法:swapoff [设备] 补充说明:swapoff实际上为swapon的符号连接,可用来关闭系统的交换区。
swapon 命令  功能说明:启动系统交换区(swap area)。 语  法:swapon [-ahsV][-p <优先顺序>][设备] 补充说明:Linux系统的内存管理必须使用交换区来建立虚拟内存。 -a   将/etc/fstab文件中所有设置为swap的设备,启动为交换区。 -h   显示帮助。 -p<优先顺序>   指定交换区的优先顺序。 -s   显示交换区的使用状况。 -V   显示版本信息。
mkfs 命令 描述:mkfs指认不仅仅指mkfs.ext2(ext3、ext4) 三个指令,还包括mke2fs命令,其他的如下
mkfs         mkfs.cramfs  mkfs.ext3    mkfs.minix mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.xfs
 
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 30 $mkdfs  -t 类型 devicefs:指定建立文件系统时的参数; -t<文件系统类型>:指定要建立何种文件系统; -v:显示版本信息与详细的使用方法; -V:显示简要的使用方法; -c:在制做档案系统前,检查该partition是否有坏轨。 mkfs.ext4 [-c|-l filename] [-b block-size] [-C cluster-size]         [-i bytes-per-inode] [-I inode-size] [-J journal-options]         [-G flex-group-size] [-N number-of-inodes]         [-m reserved-blocks-percentage] [-o creator-os]         [-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]         [-O feature[,...]] [-r fs-revision] [-E extended-option[,...]] -b<区块大小> 指定区块大小,单位为字节。 -c 检查是否有损坏的区块。 -f<不连续区段大小> 指定不连续区段的大小,单位为字节。 -F 不管指定的设备为何,强制执行mke2fs。 -i<字节> 指定"字节/inode" 的比例。 -N<inode数> 指定要建立的inode数目。 -l<文件> 从指定的文件中,读取文件西中损坏区块的信息。 -L<标签> 设置文件系统的标签名称。 -m<百分比值> 指定给管理员保留区块的比例,预设为5%。 -M 记录最后一次挂入的目录。 -q 执行时不显示任何信息。 -t 指定创建文件系统类型 -r 指定要建立的ext2文件系统版本。 -R=<区块数> 设置磁盘阵列参数。 -S 仅写入superblock与group descriptors,而不更改inode able inode bitmap以及block bitmap。 
 
实际实例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mkfs.ext3 /dev/sda   ls -l /dev/sda*  mkfs.ext3 /dev/sda1  mkfs -t ext3 /dev/sda2  sudo mkfs.vfat -F 32 -n disk /dev/sdb1            mkfs.xfs /dev/nvme0n1p1 echo  "/dev/nvme0n1p1  /opt  xfs rw,relatime,attr2,inode64,noquota 0 0"  >> /etc/fstabmount -a 
注意事项: 
MBR的extended partition 不能删除格式化,但可以对主分区或者逻辑分区格式化,MBR可以采用 fdisk parted 而 GPT可以采用 parted; 
 
dd 命令 描述:用于复制文件并对原文件的内容进行转换和格式化处理,dd命令功能很强大的,对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果。
用的比较多的还是用dd来备份裸设备但是不推荐,如果需要备份oracle裸设备,可以使用rman备份,或使用第三方软件备份,使用dd的话管理起来不太方便。 
建议在有需要的时候使用dd 对物理磁盘操作,如果是文件系统的话还是使用tar backup cpio等其他命令更加方便。 另外,使用dd对磁盘操作时,最好使用块设备文件。 
 
基础语法:1 2 3 4 5 6 7 8 9 10 11 12 用法:dd [操作数] ... 或:dd 选项 if =file  of=file   ibs=bytes   obs=bytes   bs=bytes          cbs=bytes   skip=blocks  seek=blocks  count=blocks  oflag=dsync   
 数字值选项(以字节或块为单位)后面可以跟一个乘数: k=1024,b=512,w=2,c=1(w和c是GNU扩展语法,最好别 使用w,因为在system V中,它表示2,在4.2 BSD中,它 表示4) GEU fileutils 4.0并且允许在数据块大小的叙述中使用下列乘法后缀(用bs=,cbs=,obs=):M=1048576(1024^2),G=1073741824, 同理可得T,P,E,Z,Y D后缀表示数值是以 十进制表示的:kD=1000 MD=1000000 GD=1000000000等等。 (注意,在ls、df、du命令中,M等标记的大小是由环境 变量确定的,而在DD中,它的值是固定的)
                 
                weiyigeek.top-单位切换
             
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 conv=转换[,转换]   ascii:将EBCDIC转换成ascii。 ebcdic:将ascii转换成ebcdic。 ibm:将ascii转换成alternative ebcdic。 block:每一行输入,无论长短,输出都是 cbs 字节,并且其中的lq换行rq(NEWLINE,即c中的)用 空格替换。如有必要,行尾会填充空格。 unblock:用lq换行rq替换每个输入块( cbs 字节大小)末尾的空格。 lcase:将大写字母转换成小写lower。 ucase:将小写字母转换成大写upper。 swab:交换每对输入字节。如果读入的字节数是奇数,最后 一个字节只是简单的复制到输出(因为没有能跟它交换的 字节了)(POSIX 1003.26,PASC翻译1003.2 3号和4号)。  noerror:发生读错误时,继续进行。 notrunc:不截断输出文件。 sync:用0填充到每个输入块的末尾,使其大小为 ibs 字节。 fdatasyn  
 
实际案例:1 2 3 4 5 6 7 8 dd if =/dev/random of=/dev/sda dd if =/dev/zero of=sun.txt bs=1M count=1   
                 
                weiyigeek.top-磁盘写
             
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 time dd if =/dev/sdb1 of=/dev/null bs=8k time dd if =/dev/sdb1 of=/test1.dbf bs=8k   dd if =/dev/hdx of=/dev/hdy           dd if =/dev/hdx of=/path/to/image   dd if =/path/to/image of=/dev/hdx     dd if =/dev/hdx | gzip >/path/to/image.gz   gzip -dc /path/to/image.gz | dd of=/dev/hdx      dd if =/dev/cdrom(hdc) of=/root/cd.iso   dd if =/dev/hda of=/root/image count=1 bs=512   dd if =/root/image of=/dev/had dd if =/dev/fd0 of=disk.img count=1 bs=1440k  tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys --exclude=/media / dd if =/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k) dd if =/dev/urandom of=/dev/hda1 注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。 dd if =/dev/zero of=/swapfile bs=4M count=500 dd if =/dev/zero of=/tmp/test1.img bs=4k count=10000 oflag=dsync 
 
                 
                weiyigeek.top-
             
增加swap分区文件大小:1 2 3 4 5 6 7 8 9 10 11 dd if =/dev/zero of=/swapfile bs=1024 count=262144 mkswap /swapfile swapon /swapfile /swapfile swap swap default 0 0 
确定硬盘的最佳块大小:1 2 3 4 5 6 7 8 9 10 11 12 dd if =/dev/zero bs=2048 count=500000 of=/root/1Gb.file dd if =/dev/zero bs=4096 count=250000 of=/root/1Gb.file dd if =/dev/zero bs=8192 count=125000 of=/root/1Gb.file dd if =/dev/zero bs=1024 count=1000000 of=/root/1Gb.file   dd if =/dev/sda of=/dev/sda  dd if =/dev/hda of=/dev/hda 
cfdisk 命令 描述:用来磁盘分区的程序,它十分类似DOS的fdisk,具有互动式操作界面而非传统fdisk的问答式界面,您可以轻易地利用方向键来操控分区操作。1 2 3 4 5 6 7 8 9 10 11 12 13 语  法: cfdisk [-avz][-c <柱面数目>-h <磁头数目>-s <盘区数目>][-P <r,s,t>][外围设备代号] 参  数: -a   在程序里不用反白代表选取,而以箭头表示。 -c<柱面数目>   忽略BIOS的数值,直接指定磁盘的柱面数目。 -h<磁头数目>   忽略BIOS的数值,直接指定磁盘的磁头数目。 -P<r,s,t>   显示分区表的内容,附加参数"r" 会显示整个分区表的详细资料,                             附加参数"s" 会依照磁区的顺序显示相关信息,                           附加参数"t" 则会以磁头,磁区,柱面的方式来显示资料。 -s<磁区数目>   忽略BIOS的数值,直接指定磁盘的磁区数目。 -v   显示版本信息。 -z   不读取现有的分区,直接当作没有分区的新磁盘使用。 
对指定的软碟机装置进行低阶格式化,使用这个指令对软碟格式化的时候,最好指定像是下面的装置:1 2 3 4 5 6 7 8 9   /dev/fd0d360 磁碟机 A: ,磁片为 360KB 磁碟   /dev/fd0h1440 磁碟机 A: ,磁片为 1.4MB 磁碟   /dev/fd1h1200 磁碟机 B: ,磁片为 1.2MB 磁碟 参数:   -n 关闭确认功能。这个选项会关闭格式化之后的确认步骤。 范例:    fdformat -n /dev/fd0h1440   
功能说明:对MS-DOS文件系统的磁盘进行格式化,mformat为mtools工具指令,模拟MS-DOS的format指令,可将指定的磁盘或硬盘分区格式化为MS-DOS文件系统。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 mformat [-1aCFIKX][-0 <数据传输率>][-2 <磁区数>][-A <数据传输率>][-B <开机区文件>][-c <丛集大小>][-h <磁头数>][-H <隐藏磁区数>][-l <磁盘标签>][-M <磁区大小>][-n <序号>][-r <根目录大小>][-s <磁区数>][-S <磁区大小>][-t <柱面数>][驱动器代号] -0<数据传输率>   指定第0磁轨的数据传输率。 -1   不使用2M格式。 -2<磁区数>   指定在第0磁轨的第0个磁头的磁区数,也就是所谓的2M格式。 -a   指定产生Atari格式的序号。 -A<数据传输率>   指定第0磁轨以外所有磁轨的数据传输率。 -B<开机区文件>   从指定的文件来建立开机区。 -c<丛集大小>   指定丛集大小,单位为磁区。 -C   建立磁盘MS-DOS文件系统的映像文件。 -F   以FAT32来格式化磁盘。 -H<隐藏磁区数>   指定隐藏磁区的数目。 -I   指定FAT32的frVersion编号。 -k   尽可能地保留原有的开机区。 -l<磁盘标签>   指定磁盘标签名称。 -M<磁区大小>   指定MS-DOS文件系统所使用的磁区大小,预设应该与硬体磁区大小相同,单位为字节。 -n<序号>   指定序号。 -r<根目录大小>   指定根目录的大小,单位为磁区。 -s<磁区数>   指定每一磁轨所包含的磁区数目。 -S<磁区大小>   指定硬件磁区大小。 -t<柱面数>   指定柱面数目。 -X   格式化XDF磁盘。 
 
resize2fs 命令 描述:该命令用来增大或者收缩未加载的ext2/ext3/ext4文件系统的大小,常常用在LVM逻辑卷划分;
注意事项:
如果文件系统是处于mount状态下,那么它只能做到扩容前提条件是内核支持在线resize。 
linux kernel 2.6支持在mount状态下扩容但仅限于ext3文件系统,高版本的可以无视(即不用挂出在执行); 
 
Syntax & Param:1 2 3 4 5 6 7 语法格式:resize2fs [参数] [文件] resize2fs [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [-b|-s|new_size] [-S RAID-stride] [-z undo_file] 常用参数: -d	打开调试特性 -p	打印已完成的百分比进度条 -f	强制执行调整大小操作,覆盖掉安全检查操作 -F	开始执行调整大小前,刷新文件系统设备的缓冲区 
基础实例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 umount -l /dev/mapper/WeiyiGeek-Root-vgs e2fsck -f /dev/mapper/WeiyiGeek-Root-vgs  resize2fs /dev/mapper/WeiyiGeek-Root-vgs mount /dev/mapper/WeiyiGeek-Root-vgs resize2fs -d /dev/linuxprobe/vo resize2fs -p /dev/linuxprobe/vo resize2fs -f /dev/linuxprobe/vo resize2fs -F /dev/linuxprobe/vo 
 
0x03 磁盘物理检测 tune2fs 命令 描述:允许系统管理员在 Linux 的 ext2、ext3、ext4 文件系统中调整各种可调的文件系统参数
Windows下面如果出现意外断电死机情况,下次开机一般都会出现系统自检 
Linux系统下面也有文件系统自检,而且是可以通过tune2fs命令,自行定义自检周期及方式. 
 
使用窗口管理器(GUI)删除文件和使用命令行工具(CLI)删除文件这两种方法之间是有区别的;
语法与参数:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 tune2fs [选项] [文件系统]   -c:调整最大加载次数; -C:设置文件系统已经被加载的次数; -e:设置内核代码检测到错误时的行为; -f:强制执行修改,即使发生错误; -i:设置相邻两次文件系统检查的相隔时间; -j:为“ext2”文件系统添加日志功能,将其转换为“ext3”文件系统; -l:显示文件超级块内容; -L:设置文件系统卷标; -m:显示文件保留块的百分比; -M:设置文件系统最后被加载到的目录; -o:设置或清除文件系统加载的特性或选项; -O:设置或清除文件系统的特性或选项; -r:设置文件系统保留块的大小; -T:设置文件系统上次被检查的时间; -u:设置可以使用文件系统保留块的用户; -U:设置文件系统的UUID。 
实际案例: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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 tune2fs -l /dev/sda1 tune2fs 1.44.5 (15-Dec-2018) Filesystem volume name:   <none> Last mounted on:          /boot Filesystem UUID:          3851c2b2-f6f8-478a-8506-42cf02f4e15f   Filesystem magic number:  0xEF53 Filesystem revision  Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super large_file Filesystem flags:         signed_directory_hash Default mount options:    user_xattr acl Filesystem state:         not clean Errors behavior:          Continue Filesystem OS type :       Linux Inode count:              61056 Block count:              243968 Reserved block count:     12198 Free blocks:              207391 Free inodes:              60713 First block:              0 Block size:               4096 Fragment size:            4096 Reserved GDT blocks:      59 Blocks per group:         32768 Fragments per group:      32768 Inodes per group:         7632 Inode blocks per group:   477 Filesystem created:       Tue May 21 15:48:09 2019 Last mount time:          Tue Jun 18 09:10:09 2019 Last write time:          Tue Jun 18 09:10:09 2019 Mount count:              1 Maximum mount count:      -1 Last checked:             Tue Jun 18 09:10:09 2019 Check interval:           0 (<none>) Lifetime writes:          387 MB Reserved blocks uid:      0 (user root) Reserved blocks gid:      0 (group root) First inode:              11 Inode size:               256 Required extra isize:     32 Desired extra isize:      32 Default directory hash :   half_md4 Directory Hash Seed:      e479dc47-b5b0-43e0-b4f3-5d810fd6519a sudo tune2fs -l /dev/sda1 |grep -i inode tune2fs -c 30 /dev/hda1       tune2fs -c -l /dev/hda1       tune2fs -i 10 /dev/hda1       tune2fs -i 1d /dev/hda1       tune2fs -i 3w /dev/hda1       tune2fs -i 6m /dev/hda1       tune2fs -i 0 /dev/hda1        tune2fs -j /dev/hda1          tune2fs -r 40000 /dev/hda1    tune2fs -o acl,user_xattr /dev/hda1        uuidgen | xargs tune2fs /dev/sda5 -U tune2fs -U c1b9d5a2-f162-11cf-9ece-0020afc76f16 /dev/sda5 
dumpe2fs 命令 描述:查询指定分区详细文件系统信息的命令,用于打印“ext2/ext3”设备文件系统中的超级块和块组的信息。1 2 3 4 5 6 7 8 9 dumpe2fs(选项)(参数) -b:打印文件系统中预留的块信息; -ob<超级块>:指定检查文件系统时使用的超级块; -OB<块大小>:检查文件系统时使用的指定的块大小; -h:仅显示超级块信息; -i:从指定的文件系统映像文件中读取文件系统信息; -x:以16进制格式打印信息块成员。 
实际案例: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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 $dumpe2fs  -h /dev/sda1 dumpe2fs 1.44.5 (15-Dec-2018) Filesystem volume name:   <none> Last mounted on:          /boot Filesystem UUID:          3851c2b2-f6f8-478a-8506-42cf02f4e15f Filesystem magic number:  0xEF53 Filesystem revision  Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super large_file Filesystem flags:         signed_directory_hash Default mount options:    user_xattr acl   Filesystem state:         not clean Errors behavior:          Continue Filesystem OS type :       Linux Inode count:              61056 Block count:              243968 Reserved block count:     12198 Free blocks:              207391 Free inodes:              60713 First block:              0 Block size:               4096 Fragment size:            4096 Reserved GDT blocks:      59 Blocks per group:         32768 Fragments per group:      32768 Inodes per group:         7632 Inode blocks per group:   477 Filesystem created:       Tue May 21 15:48:09 2019 Last mount time:          Tue Jun 18 09:10:09 2019 Last write time:          Tue Jun 18 09:10:09 2019 Mount count:              1 Maximum mount count:      -1 Last checked:             Tue Jun 18 09:10:09 2019 Check interval:           0 (<none>) Lifetime writes:          387 MB Reserved blocks uid:      0 (user root) Reserved blocks gid:      0 (group root) First inode:              11 Inode size:               256 Required extra isize:     32 Desired extra isize:      32 Default directory hash :   half_md4 Directory Hash Seed:      e479dc47-b5b0-43e0-b4f3-5d810fd6519a dumpe2fs /dev/sdc1 | grep UUID Filesystem UUID: d17e3c31-e2c9-4f11-809c-94a549bc43b7 
入坑事项 :
我需要同步文件系统,一开始使用resize2fs后来看到xfs根式的使用dumpe2fs都报同样的错误;
                 
                weiyigeek.top-xfs格式
             
 
 
xfs_growfs 命令 描述:查看xfs分区类型的inode1 xfs_growfs [ 选项 ] /dev/sda1 
                 
                weiyigeek.top-xfs分区类型
             
smartctl 命令 描述:主要运用于Linux硬盘健康检测,随着硬盘容量、速度的快速发展,硬盘的可靠性问题越来越重要,今天的单块硬盘存储容量可轻松达到1TB,硬盘损坏带来的影响非常巨大,不同的文件系统(xfs,reiserfs,ext3)都有自己的检测和修复工具。 检测之前可以先使用dmesg命令查看有没有硬件I/O故障的日志,如果有先用fsck看看是不是文件系统有问题,如果不是则可以使用下面介绍硬盘检测和优化方法来修复它。
 grep”error”/va/log/messages*;
 
SMART是一种磁盘自我分析检测技术,早在90年代末就基本得到了普及每一块硬盘(包括IDE、SCSI),在运行的时候都会将自身的若干参数记录下来,这些参数包括型号、容量、温度、密度、扇区、寻道时间、传输、误码率等。硬盘运行了几千小时后,很多内在的物理参数都会发生变化,某一参数超过报警阈值,则说明硬盘接近损坏,此时硬盘依然在工作,如果用户不理睬这个报警继续使用,那么硬盘将变得非常不可靠,随时可能故障。
如何启用smart?  答:启SMART是和主板BIOS上相应功能配合的,要使用SMART,必须先进入到主板BIOS设置里边启动相关设置。一般从Pentium2级别起的主板,都支持SMART,BIOS启动以后,就是操作系统级别的事情了(Windows没有内置SMART相关工具,需要安装第三方工具软件),好在Linux上很早就有了SMART支持了,如果把Linux装在VMware等虚拟机上,在系统启动时候可以看到有个服务启动报错:smartd。这个服务器就是smart的daemon进程(因为vmware虚拟机的硬盘不支持SMART,所以报错)。smartd是一个守护进程(一个帮助程序),它能监视拥有自我监视,分析和汇报技术(Self-Monitoring, Analysis, and Reporting Technology - SMART)的硬盘。SMART体系使得硬盘能监视并汇报自己的运行状况.它的一个重要特性是能够预测失败,使得系统管理员能避免数据丢失。
命令安装:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $yum  search smartctl gsmartcontrol.x86_64 : Graphical user interface for  smartctl $yum  install gsmartcontrol smartctl -a <device>  smartctl -s on <device>  smartctl -t short <device>  smartctl -t long <device>  smartctl -C -t short <device>  smartctl -C -t long <device>  smartctl -X <device>  smartctl -l selftest <device>  smartctl -l error <device>  
实际案例: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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 smartctl -a /dev/sda    smartctl -i /dev/sda smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda smartctl -H /dev/sda - PASSED/OK 这表示硬盘健康状态良好; - FAILED 那么最好立刻给服务器更换硬盘 smartctl -A /dev/sda   smartctl -s on  /dev/sda   smartctl -t short  /dev/sda   smartctl -t long  /dev/sda    smartctl -C -t  /dev/sda    smartctl -C -t  /dev/sda   smartctl -X   /dev/sda       smartctl -l selftest  /dev/sda   smartctl -l error   /dev/sda     
如果需要定期登录到服务器上运行smartctl比较麻烦时,linux还提供了系统进程smartd,编辑配置文件:vi  /etc/smartd.conf 这个配置文件中大部分可能是注释掉的说明,只需要写入和当前硬盘相关的配置即可:
参数 
说明 
 
 
/dev/sda -H  -m  test@test123123.com  
监控磁盘的健康状态,当SMART中报告 PASSED的时候不理睬。一旦出现 Failure,立刻用邮件通知用户指定的邮箱 
 
/dev/sda -a -m  admin@example.com ,root@localhost 
监控磁盘的所有属性,当SMART中报告 PASSED的时候不理睬。一旦出现 Failure,立刻用邮件通知用户指定的邮箱 
 
/dev/twa0 -d 3ware,0 -a -s L/../../7/00 
监控3ware 9000控制器上的第一个ATA磁盘的所有属性,在每个礼拜天的00:00–01:00进行长格式的自我检测 
 
 
1 2 /dev/sg2 -d areca,1 -a  -s L/../(01|15)/./22 	 监控Areca Raid控制器上的第一个SATA磁盘的所有属性,在每个礼拜月的第1天和第15天的22:00--23:00进行长格式的自我检测 -s (O/../.././(00|06|12|18)|S/../.././01|L/../../6/03)  在每天的00:00,06:00,12:00,18:00进行离线的自检,并在每天的01:00-02:00进行短格式的自检,并在每个礼拜6的03:00-04:00进行长格式的自检 
 
配置好 smartd.conf 后需执行 /etc/init.d/smartd restart 即可生效
其他和smartd.conf相关的配置可参见:http://smartmontools.sourceforge.net/man/smartd.conf.5.html  
badblock 命令 描述:检查磁盘装置中损坏的区块,执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。1 2 3 4 5 6 7 8 9 10 11 12  badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数][启始区块] -b<区块大小>   指定磁盘的区块大小,单位为字节。 -o<输出文件>   将检查的结果写入指定的输出文件。 -s   在检查时显示进度。 -v   执行时显示详细的信息。 -w   在检查时,执行写入测试。 [磁盘装置]   指定要检查的磁盘装置。 [磁盘区块数]   指定磁盘装置的区块总数。 [启始区块]   指定要从哪个区块开始检查。 
实际案例:1 2 3 4 5 6 7 8 9 10 $badblocks  -s//显示进度 -w//以写去检测 -v//显示执行详细情况 /dev/sda2  $badblocks  -s /dev/sda -b 512 $badblocks  -s -v /dev/sda1 $badblocks  -s -v -o /root/badblocks.log /dev/sda badblocks -s -w /dev/sda END START  Pass completed, 12 bad blocks found. (12/0/0)Error 表明存在坏道 
                 
                weiyigeek.top-badblocks
             
补充事项: 
逻辑坏道修复后再用badblocks -s -v -o /root/bb.log /dev/sda监测看是否还有坏道存在,如果坏道还是存在的话说明坏道属于硬盘坏道,硬盘坏道要用隔离方法.首先记录监测出的硬盘坏道然后分区的时候把硬盘坏道所在的扇区分在一个分区(大小一般大于坏扇区大小),划分出的坏道分区不使用即可达到隔离的目的; 
0磁道坏道和硬盘坏道(准备换硬盘),修复方法是隔离0磁道,使用fdsk划分区的时候从1磁道开始划分区。如果是硬盘坏道的话,只能隔离不能修复; 
 
mbadblocks 命令 功能说明:检查MS-DOS文件系统的磁盘是否有损坏的磁区。 语  法:mbadblocks [驱动器代号] 补充说明:mbadblocks为mtools工具指令,可用来扫描MS-DOS文件系统的磁盘驱动器,并标示出损坏的磁区。
mknod命令 描述:用于创建Linux中的字符设备文件和块设备文件。 Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。
应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。 
 
为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。
主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备 
对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3。 
 
Linux为所有的设备文件都提供了统一的操作函数接口,方法是使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如open()、close()、read()和write()等,但由于外设的种类较多,操作方式各不相同。
Struct file_operations结构体中的成员为一系列的接口函数,如用于读/写的read/write函数和用于控制的ioctl等。
打开一个文件就是调用这个文件file_operations中的open操作。 
不同类型的文件有不同的file_operations成员函数,如普通的磁盘数据文件,接口函数完成磁盘数据块读写操作;而对于各种设备文件,则最终调用各自驱动程序中的I/O函数进行具体设备的操作。 
这样应用程序根本不必考虑操作的是设备还是普通文件,可一律当作文件处理,具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口。 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 语法:mknod(选项)(参数) -Z:设置安全的上下文; -m:设置权限模式; 文件名:要创建的设备文件名; 类型:指定要创建的设备文件的类型; 主设备号:指定设备文件的主设备号; 次设备号:指定设备文件的次设备号。 b      创建(有缓冲的)区块特殊文件 c,u   创建(没有缓冲的)字符特殊文件,虚拟设备 p      创建先进先出(FIFO)特殊文件 
 
实际案例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $ls  -la /dev/tty*crw-rw---- 1 root dialout 4, 64 6月  17 17:14 /dev/ttyS0 $mknod  /dev/ttyS0 c 4(主) 64(次)mknod /dev/hda3 b 3 7     ls -al /dev/hda3          brw-r--r-- 1 root root 3, 7 8月  21 11:01 /dev/hda3 mknod /dev/ttyUSB32 c 188 32 crw-r--r-- 1 root root 188, 32 6月  16 17:47 /dev/ttyUSB1 
注意:  您的shell 内含自己的mknod 程序版本,它会覆盖这里所提及的相应,版本请查阅您的shell 文档获知它所支持的选项。
e2fsck 命令 描述:e2fsck(ext2 file system check) 检查ext2文件系统的正确性。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 语  法:e2fsck [-acCdfFnprsStvVy][-b <superblock>][-B <区块大小>][-l <文件>][-L <文件>][设备名称] 0     没有任何错误发生。 1     文件系统发生错误,并且已经修正。 2     文件系统发生错误,并且已经修正。 4     文件系统发生错误,但没有修正。 8     运作时发生错误。 16    使用的语法发生错误。 128   共享的函数库发生错误。 -a   不询问使用者意见,便自动修复文件系统。 -b<superblock>   指定superblock,而不使用预设的superblock。 -B<区块大小>   指定区块的大小,单位为字节。 -c   一并执行badblocks,以标示损坏的区块。 -C   将检查过程的信息完整记录在file descriptor中,使得整个检查过程都能完整监控。 -d   显示排错信息。 -f   即使文件系统没有错误迹象,仍强制地检查正确性。 -F   执行前先清除设备的缓冲区。 -l<文件>   将文件中指定的区块加到损坏区块列表。 -L<文件>   先清除损坏区块列表,再将文件中指定的区块加到损坏区块列表。因此损坏区块列表的区块跟文件中指定的区块是一样的。 -n   以只读模式开启文件系统,并采取非互动方式执行,所有的问题对话均设置以"no" 回答。 -p   不询问使用者意见,便自动修复文件系统。 -r   此参数只为了兼容性而存在,并无实际作用。 -s   如果文件系统的字节顺序不适当,就交换字节顺序,否则不做任何动作。 -S   不管文件系统的字节顺序,一律交换字节顺序。 -t   显示时间信息。 -v   执行时显示详细的信息。 -V   显示版本信息。 -y   采取非互动方式执行,所有的问题均设置以"yes" 回答。 
补充说明:
1.进行修复中间可能修复到一半的时候出现aborted的情况,此时处理创建/etc/e2fsck.conf,包含以下内容:1 2 [scratch_files] directory = /var/cache/e2fsck 
 
 
 
ext2ed 命令 描述:ext2ed(ext2 file system editor)文件系统编辑程序,ext2ed可直接处理硬盘分区上的数据,这指令只有Red Hat Linux才提供。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 30 31 语  法:ext2ed 一般指令 setdevice[设备名称]    disablewrite    enablewrite    help [指令]   next    prev    pgup    pgdn    set    writedata    super     group<编号>    cd <目录或文件>   Superblock模式 gocopy<备份编号>    setactivecopy    Group模式 blockbitmap    inode    inodebitmap    Inode模式 dir    file   
fsconf 命令 描述:fsconf(file system configurator) 设置文件系统相关功能。1 2 3 4 语  法:fsconf [--check] 补充说明:fsconf是Red Hat Linux发行版专门用来调整Linux各项设置的程序。 参  数: --chedk   检查特定文件的权限。 
hdparm 命令 描述:hdparm(hard disk parameters) 显示与设定硬盘的参数,测试硬盘读写速度,还能检测,显示与设定IDE或SCSI硬盘的参数。
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 30 31 语  法:hdparm [-CfghiIqtTvyYZ][-a <快取分区>][-A <0或1>][-c <I/O模式>][-d <0或1>][-k <0或1>][-K <0或1>][-m <分区数>][-n <0或1>][-p <PIO模式>][-P <分区数>][-r <0或1>][-S <时间>][-u <0或1>][-W <0或1>][-X <传输模式>][设备] 补充说明:hdparm可检测,显示与设定IDE或SCSI硬盘的参数。 参  数: -a<快取分区>    -A<0或1>    -c<I/O模式>   -C    -d<0或1>    -f    -g    -h    -i    -I    -k<0或1>    -K<0或1>    -m<磁区数>    -n<0或1>    -p<PIO模式>    -P<磁区数>   -q    -r<0或1>    -S<时间>   -t    -T    -u<0或1>    -v    -W<0或1>    -X<传输模式>   -y    -Y    -Z    
 
实际案例:1 2 3 4 5 6 $hdparm  -Tt /dev/sda
symlinks 命令 描述:symlinks(symbolic links) 维护符号连接的工具程序,可检查目录中的符号连接,并显示符号连接类型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 语  法:symlinks [-cdrstv][目录] absolute:符号连接使用了绝对路径。 dangling:原始文件已经不存在。 lengthy:符号连接的路径中包含了多余的"../" 。 messy:符号连接的路径中包含了多余的"/" 。 other_fs:原始文件位于其他文件系统中。 relative:符号连接使用了相对路径。 -c   将使用绝对路径的符号连接转换为相对路径。 -d   移除dangling类型的符号连接。 -r   检查目录下所有子目录中的符号连接。 -s   检查lengthy类型的符号连接。 -t   与-c一并使用时,会显示如何将绝对路径的符号连接转换为相对路径,但不会实际转换。 -v   显示所有类型的符号连接。 
 
 
0x04 恢复与备份 extundelete 命令 描述:extundelete恢复Linux被删除文件,然后讨论到使用extundelete进行了恢复,抢救了部分未被覆盖的数据文件,该软件官方地址:http://extundelete.sourceforge.net/ 
安装extundelete :1 2 3 4 5 $ bunzip2 extundelete-0.2.0.tar.bz2 $ tar xvf extundelete-0.2.0.tar $ cd  extundelete-0.2.0 $./configure $make  && make install
 实际案例: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 30 31 32 umount /dev/partition mount -o remount,ro /dev/partition extundelete /dev/partition --restore-all extundelete /dev/partition --restore-directory /backup/gnutool-delete extundelete /dev/partition --restore-files /etc/passwd extundelete /dev/sdb1 --restore-directory /tmp/xifenfei $cd  RECOVERED_FILES/ll total 4 drwxr-xr-x 3 root root 4096 Aug 31 21:36 xifenfei $cd  xifenfei/$ll total 20 drwxr-xr-x 2 root root  4096 Aug 31 21:36 xff -rw-r--r-- 1 root root 13231 Aug 31 21:36 xff.txt $cd  xff$ll total 16 -rw-r--r-- 1 root root 13231 Aug 31 21:36 xff.txt132 --恢复成功 extundelete /dev/sdb1  --restore-all 
 通过上述实验证明extundelete还是有很大的不完整性,基于整个磁盘的恢复功能较为强大,基于目录和文件的恢复还不够强大.不过该软件在很多时候还是有救火的功能,特别是当蛋筒的人员删除了数据库的部分文件之时.
cpio 命令 描述:主要是用来建立或者还原备份档的工具程序,cpio命令可以复制文件到归档包中,或者从归档包中复制文件。 基础语法: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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 cpio 选项<[文件][设备] -0或--null:接受新增列控制字符,通常配合find指令的“-print0”参数使用;  -a或--rest-access-time:重新设置文件的存取时间;  -A或--append:附加到已存在的备份文档中,且这个备份文档必须存放在磁盘上,而不能放置于磁带机里;  -b或--awap:此参数的效果和同时指定“-ss”参数相同;  -B:将输入/输出的区块大小改成5210Bytes;  -c:使用旧ASCII备份格式;  -C<区块大小>或--io-size=<区块大小>:设置输入/输出的区块大小,单位是Byte;  -d或--make-directories:如有需要cpio会自行建立目录;  -E<范本文件>或--pattern-file=<范本文件>:指定范本文件,其内含有一个或多个范本样式,让cpio解开符合范本条件的文件,格式为每列一个范本样式  -f或--nonmatching:让cpio解开所有不符合范本条件的文件;  -F<备份档>或--file=<备份档>:指定备份档的名称,用来取代标准输入或输出,也能借此通过网络使用另一台主机的保存设备存取备份档;  -H<备份格式>:指定备份时欲使用的文件格式;  -i或--extract:执行copy-in模式,还原备份档;  -l<备份档>:指定备份档的名称,用来取代标准输入,也能借此通过网络使用另一台主机的保存设备读取备份档;  -k:此参数将忽略不予处理,仅负责解决cpio不同版本间的兼容性问题;  -l或--link:以硬连接的方式取代复制文件,可在copy-pass模式下运用;  -L或--dereference:不建立符号连接,直接复制该连接所指向的原始文件;  -m或preserve-modification-time:不去更改文件的更改时间;  -M<回传信息>或--message=<回传信息>:设置更换保存媒体的信息;  -n或--numeric-uid-gid:使用“-tv”参数列出备份档的内容时,若再加上参数“-n”,则会以用户识别和群组识别码替代拥有者和群组名称列出文件清单;  -o或--create:执行copy-out模式,建立备份档;  -O<备份档>:指定备份档的名称,用来取代标准输出,也能借此通过网络使用另一台主机的保存设备存放备份档;  -p或--pass-through:执行copy-pass模式,略过备份步骤,直接将文件复制到目的目录;  -r或--rename:当有文件名称需要更改时,采用互动模式;  -R<拥有者><:/.><所属群组>或----owner<拥有者><:/.><所属群组> 在copy-in模式还原备份档,或copy-pass模式复制文件时,可指定这些备份,复制的文件的拥有者与所属群组;  -s或--swap-bytes:交换每队字节的内容;  -S或--swap-halfwords:交换每半个字节的内容;  -t或--list:将输入的内容呈现出来;  -u或--unconditional:置换所有文件,不论日期时间的新旧与否,皆不予询问而直接覆盖;  -v或--verbose:详细显示指令的执行过程;  -V或--dot:执行指令时。在每个文件的执行程序前面加上“.”号;  --block-size=<区块大小>:设置输入/输出的区块大小,假如设置数值为5,则区块大小为2500,若设置成10,则区块大小为5120,以此类推;  --force-local:强制将备份档存放在本地主机;  --help :在线帮助;  --no-absolute-filenames:使用相对路径建立文件名称;  --no-preserve-owner:不保留文件的拥有者,谁解开了备份档,那些文件就归谁所有;  -only-verify-crc:当备份档采用CRC备份格式时,可使用这项参数检查备份档内的每个文件是否正确无误;  --quiet:不显示复制了多少区块;  --sparse:倘若一个文件内含有大量的连续0字节,则将此文件存在稀疏文件;  --version:显示版本信息 
实际案例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 find /etc –type  f | cpio –ocvB >/opt/etc.cpio find / -print  | cpio -covB > /dev/st0   cpio -icdvt < /dev/st0 > /tmp/st_content cpio –icduv < /opt/etc.cpio 
补充示例:1 2 3 4 5 6 $rpm  -qf /bin/lscoreutils-8.22-23.el7.x86_64 rpm2cpio /mnt/cdrom/Pakages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls   cp /root/bin/ls /bin/  
rpm2cpio 命令 描述:可以将rpm包转换成为cpio可以识别的格式的命令,并方便cpio进行提取;(在Redhat系列使用)1 rpm2cpio 包全名 | cpio -idv 文件绝对路径 
  
fsck 命令 - 检查和修复Linux文件系统 描述:fsc(file system check)k用于检查一个或多个Linux文件系统,并可选地修复它们。文件可以是设备名或者分区设备; 语法参数:1 2 3 4 5 6 7 8 9 10 11 12 13 14 fsck [-aANPrRsTV][-t <文件系统类型>][文件系统...] -a   自动修复文件系统,不询问任何问题。 -A   依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统。 -C [fd]  -N   不执行指令,仅列出实际执行会进行的动作。 -P   当搭配"-A" 参数使用时,则会同时检查所有的文件系统。 -r   采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式。 -R   当搭配"-A" 参数使用时,则会略过/目录的文件系统不予检查。 -s   依序执行检查作业,而非同时执行。 -t   <文件系统类型>   指定要检查的文件系统类型。 -T   执行fsck指令时,不显示标题信息。 -V   显示指令执行过程。 
fsck返回的退出码为以下条件:1 2 3 4 5 6 7 8 0      No errors 1      Filesystem errors corrected 2      System should be rebooted 4      Filesystem errors left uncorrected 8      Operational error 16     Usage or syntax error 32     Checking canceled by user request 128    Shared-library error 
基础实例1 2 3 4 5 fsck -a /dev/sda fsck -vcfy /dev/sda3 
fsck.ext2 命令 描述:fsck.ext2(file system check-second filesystem)检查文件系统并尝试修复错误,当ext2文件系统发生错误时,可用fsck.ext2指令尝试加以修复;与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 fsck.ext2 [-acdfFnprsStvVy][-b <分区第一个磁区地址>][-B <区块大小>][-C <反叙述器>][-I <inode缓冲区块数>][-l/L <损坏区块文件>][-P <处理inode大小>][外围设备代号] -a   自动修复文件系统,不询问任何问题。 -b<分区第一个磁区地址>   指定分区的第一个磁区的起始地址,也就是Super Block。 -B<区块大小>   设置该分区每个区块的大小。 -c   检查指定的文件系统内,是否存在有损坏的区块。 -C<反叙述器>   指定反叙述器,fsck.ext2指令会把全部的执行过程,都交由其逆向叙述,便于排错或监控程序执行的情形。 -d   详细显示指令执行过程,便于排错或分析程序执行的情形。 -f   强制对该文件系统进行完整检查,纵然该文件系统在慨略检查下没有问题。 -F   检查文件系统之前,先清理该保存设备块区内的数据。 -I<inode缓冲区块数>   设置欲检查的文件系统,其inode缓冲区的区块数目。 -l<损坏区块文件>   把文件中所列出的区块,视为损坏区块并将其标示出来,避免应用程序使用该区块。 -L<损坏区块文件>   此参数的效果和指定"-l" 参数类似,但在参考损坏区块文件标示损坏区块之前,会先将原来标示成损坏区块者统统清楚,即全部重新设置,而非仅是加入新的损坏区块标示。 -n   把欲检查的文件系统设成只读,并关闭互动模式,否决所有询问的问题。 -p   此参数的效果和指定"-a" 参数相同。 -P  <处理inode大小>   设置fsck.ext2指令所能处理的inode大小为多少。 -r   此参数将忽略不予处理,仅负责解决兼容性的问题。 -s   检查文件系统时,交换每对字节的内容。 -S   此参数的效果和指定"-s" 参数类似,但不论该文件系统是否已是标准位顺序,一律交换每对字节的内容。 -t   显示fsck.ext2指令的时序信息。 -v   详细显示指令执行过程。 -V   显示版本信息。 -y   关闭互动模式,且同意所有询问的问题。 
 
 
0x05 存储设备扫描与管理 lvmdiskscan 命令 - 列出可以作为物理卷使用的设备 描述:该命令可以扫描系统中所有的SCSI、 (E)IDE磁盘、多路径设备 和 系统中其他一些块设备 以及 LVM pvs逻辑物理卷设备, 它获取的是真实设备存储空间大小;
注意:不赞成使用此命令,请使用pvs。
基础语法参数:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 lvmdiskscan     [ -l|--lvmpartition ]     [    --readonly  ]     [ COMMON_OPTIONS ] Common options for  lvm:     [ -d|--debug ]     [ -h|--help  ]     [ -q|--quiet ]     [ -t|--test  ]     [ -v|--verbose ]     [ -y|--yes ]     [    --commandprofile String ]     [    --config String ]     [    --driverloaded y|n ]     [    --lockopt String ]     [    --longhelp ]     [    --profile String ]     [    --version ] 
基础实例:1 2 3 4 5 6 7 $lvmdiskscan /dev/sda1 [       1.00 GiB] /dev/sda2 [     <49.00 GiB] LVM physical volume 0 disks 1 partition 0 LVM physical volume whole disks 1 LVM physical volume 
–
0x06 逻辑虚拟设备 pvs 命令 - 显示关于物理卷的信息 描述:该命令显示关于物理卷的信息
语法参数: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 30 31 32 33 34 35 36 37 38 39 40 41 42 pvs   [ -a|--all ]   [ -o|--options String ]   [ -S|--select String ]   [ -O|--sort String ]   [    --segments ]   [    --aligned ]   [    --binary ]   [    --configreport log |vg|lv|pv|pvseg|seg ]   [    --foreign ]   [    --ignorelockingfailure ]   [    --logonly ]   [    --nameprefixes ]   [    --noheadings ]   [    --nosuffix ]   [    --readonly  ]   [    --reportformat basic|json ]   [    --rows ]   [    --separator String ]   [    --shared ]   [    --unbuffered ]   [    --units r|R|h|H|b|B|s|S|k|K|m|M|g|G|t|T|p|P|e|E ]   [    --unquoted ]   [ COMMON_OPTIONS ]   [ PV|Tag ... ]      Common options for  lvm:            [ -d|--debug ]            [ -h|--help  ]            [ -q|--quiet ]            [ -t|--test  ]            [ -v|--verbose ]            [ -y|--yes ]            [    --commandprofile String ]            [    --config String ]            [    --driverloaded y|n ]            [    --lockopt String ]            [    --longhelp ]            [    --nolocking ]            [    --profile String ]            [    --version ] 
基础语法:1 2 3 4 5 pvs -a --separator " | "  PV | VG | Fmt | Attr | PSize | PFree /dev/sda1 |  |  | --- | 0  | 0 /dev/sda2 | centos | lvm2 | a-- | <49.00g | 4.00m