linux 有关磁盘

root@www ~]# df [-ahikHTm] [目录或文件名]选项与参数:-a  :列出所有的文件系统,包括系统特有的 /proc 等文件系统;-k  :以 KBytes 的容量显示各文件系统;-m  :以 MBytes 的容量显示各文件系统;-h  :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;-H  :以 M=1000K 取代 M=1024K 的进位方式;-T  :连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;-i  :不用硬盘容量,而以 inode 的数量来显示范例一:将系统内所有的 filesystem 列出来!
[root@www ~]# df
Filesystem      1K-blocks      Used Available Use% Mounted on
/dev/hdc2         9920624   3823112   5585444  41% /
/dev/hdc3         4956316    141376   4559108   4% /home
/dev/hdc1          101086     11126     84741  12% /boot
tmpfs              371332         0    371332   0% /dev/shm
# 在 Linux 底下如果 df 没有加任何选项,那么默认会将系统内所有的 # (不含特殊内存内的文件系统与 swap) 都以 1 Kbytes 的容量来列出来!# 至于那个 /dev/shm 是与内存有关的挂载,先不要理他!范例二:将容量结果以易读的容量格式显示出来
[root@www ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hdc2             9.5G  3.7G  5.4G  41% /
/dev/hdc3             4.8G  139M  4.4G   4% /home
/dev/hdc1              99M   11M   83M  12% /boot
tmpfs                 363M     0  363M   0% /dev/shm
# 不同于范例一,这里会以 G/M 等容量格式显示出来,比较容易看啦!范例三:将系统内的所有特殊文件格式及名称都列出来
[root@www ~]# df -aT
Filesystem    Type 1K-blocks    Used Available Use% Mounted on
/dev/hdc2     ext3   9920624 3823112   5585444  41% /
proc          proc         0       0         0   -  /proc
sysfs        sysfs         0       0         0   -  /sys
devpts      devpts         0       0         0   -  /dev/pts
/dev/hdc3     ext3   4956316  141376   4559108   4% /home
/dev/hdc1     ext3    101086   11126     84741  12% /boot
tmpfs        tmpfs    371332       0    371332   0% /dev/shm
none   binfmt_misc         0       0         0   -  /proc/sys/fs/binfmt_misc
sunrpc  rpc_pipefs         0       0         0   -  /var/lib/nfs/rpc_pipefs
# 系统里面其实还有很多特殊的文件系统存在的。那些比较特殊的文件系统几乎# 都是在内存当中,例如 /proc 这个挂载点。因此,这些特殊的文件系统# 都不会占据硬盘空间喔! ^_^范例四:将 /etc 底下的可用的磁盘容量以易读的容量格式显示
[root@www ~]# df -h /etc
Filesystem            Size  Used Avail Use% Mounted on
/dev/hdc2             9.5G  3.7G  5.4G  41% /
# 这个范例比较有趣一点啦,在 df 后面加上目录或者是文件时, df# 会自动的分析该目录或文件所在的 partition ,并将该 partition 的容量显示出来,# 所以,您就可以知道某个目录底下还有多少容量可以使用了! ^_^范例五:将目前各个 partition 当中可用的 inode 数量列出
[root@www ~]# df -ih 
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/hdc2               2.5M    147K    2.3M    6% /
/dev/hdc3               1.3M      46    1.3M    1% /home
/dev/hdc1                26K      34     26K    1% /boot
tmpfs                    91K       1     91K    1% /dev/shm
# 这个范例则主要列出可用的 inode 剩余量与总容量。分析一下与范例一的关系,# 你可以清楚的发现到,通常 inode 的数量剩余都比 block 还要多呢

磁盘分区 :fdisk

root@www ~]# fdisk [-l] 装置名称选项与参数:-l  :输出后面接的装置所有的 partition 内容。若仅有 fdisk -l 时,      则系统将会把整个系统内能够搜寻到的装置的 partition 均列出来。范例:找出你系统中的根目录所在磁盘,并查阅该硬盘内的相关信息
[root@www ~]# df /          <==注意:重点在找出磁盘文件名而已
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hdc2              9920624   3823168   5585388  41% /

[root@www ~]# fdisk /dev/hdc<==仔细看,不要加上数字喔!The number of cylinders for this disk is set to 5005.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): <==等待你的输入!

由于每个人环境都不一样,因此每部主机的磁盘数量也不想同。所以你可以先使用df这个命令来找出可用的磁盘文件名,然后在用fidisk来查阅。在你进入fdisk后,如果你的硬盘太大,就会出现上述信息,不过新版的不用考虑这个问题。

Command (m for help): m<== 输入 m 后,就会看到底下这些命令介绍
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition<==删除一个partition
   l   list known partition types
   m   print this menu
   n   add a new partition<==新增一个partition
   o   create a new empty DOS partition table
   p   print the partition table<==在屏幕上显示分割表q   quit without saving changes<==不储存离开fdisk程序
   s   create a new empty Sun disklabel
   t   change a partition‘s system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit<==将刚刚的动作写入分割表
   x   extra functionality (experts only)

使用fdisk是完全不用被命令的 ,只要按下m就可看到所有的动作,q是不报村推出,w是保存,在没有把握前 最好先不要保存。

Command (m for help): p<== 这里可以输出目前磁盘的状态

Disk /dev/hdc: 41.1 GB, 41174138880 bytes        <==这个磁盘的文件名与容量
255 heads, 63 sectors/track, 5005 cylinders      <==磁头、扇区与磁柱大小
Units = cylinders of 16065 * 512 = 8225280 bytes <==每个磁柱的大小

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1   *           1          13      104391   83  Linux
/dev/hdc2              14        1288    10241437+  83  Linux
/dev/hdc3            1289        1925     5116702+  83  Linux
/dev/hdc4            1926        5005    24740100    5  Extended
/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris
# 装置文件名 启动区否 开始磁柱    结束磁柱  1K大小容量 磁盘分区槽内的系统

Command (m for help): q# 想要不储存离开吗?按下 q 就对了!不要随便按 w 啊!

下半部的分割表信息主要在列出每个分割槽的个别信息项目。每个项目的意义为:

  • Device:装置文件名,依据不同的磁盘接口/分割槽位置而变。

  • Boot:是否为启动引导块?通常 Windows 系统的 C 需要这块!

  • Start, End:这个分割槽在哪个磁柱号码之间,可以决定此分割槽的大小;

  • Blocks:就是以 1K 为单位的容量。如上所示,/dev/hdc1 大小为104391K = 102MB

  • ID, System:代表这个分割槽内的文件系统应该是啥!不过这个项目只是一个提示而已,不见得真的代表此分割槽内的文件系统喔!

从上表我们可以发现几件事情:

  • 整部磁盘还可以进行额外的分割,因为最大磁柱为 5005 ,但只使用到 2052 号而已;

  • /dev/hdc5 是由 /dev/hdc4 分割出来的,因为 /dev/hdc4 为 Extended,且 /dev/hdc5 磁柱号码在 /dev/hdc4 之内;

  • 删除磁盘分区槽

如果你是按照鸟哥建议的方式去安装你的 CentOS ,那么你的磁盘应该会预留一块容量来做练习的。实际练习新增硬盘之前,我们先来玩一玩恐怖的删除好了~如果想要测试一下如何将你的 /dev/hdc 全部的分割槽删除,应该怎么做?

  1. fdisk /dev/hdc :先进入 fdisk 画面;

  2. p :先看一下分割槽的信息,假设要杀掉 /dev/hdc1;

  3. d :这个时候会要你选择一个 partition ,就选 1 啰!

  4. w (or) q :按 w 可储存到磁盘数据表中,并离开 fdisk ;当然啰,如果你反悔了,呵呵,直接按下 q 就可以取消刚刚的删除动作了!

# 练习一: 先进入 fdisk 的画面当中去!
[root@www ~]# fdisk /dev/hdc# 练习二: 先看看整个分割表的情况是如何
Command (m for help): p

Disk /dev/hdc: 41.1 GB, 41174138880 bytes
255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1   *           1          13      104391   83  Linux
/dev/hdc2              14        1288    10241437+  83  Linux
/dev/hdc3            1289        1925     5116702+  83  Linux
/dev/hdc4            1926        5005    24740100    5  Extended
/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris

# 练习三: 按下 d 给他删除吧!
Command (m for help): d
Partition number (1-5): 4

Command (m for help): d
Partition number (1-4): 3

Command (m for help): p

Disk /dev/hdc: 41.1 GB, 41174138880 bytes
255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1   *           1          13      104391   83  Linux/dev/hdc2              14        1288    10241437+  83  Linux# 因为 /dev/hdc5 是由 /dev/hdc4 所衍生出来的逻辑分割槽,因此 /dev/hdc4 被删除,# /dev/hdc5 就自动不见了!最终就会剩下两个分割槽而已喔!

Command (m for help): q
  • 练习新增磁盘分区槽

新增磁盘分区槽有好多种情况,因为新增 Primary / Extended / Logical 的显示结果都不太相同。底下我们先将 /dev/hdc 全部删除成为干净未分割的磁盘,然后依序新增给大家瞧瞧!

# 练习一: 进入 fdisk 的分割软件画面中,并删除所有分割槽:
[root@www ~]# fdisk /dev/hdc
Command (m for help): d
Partition number (1-5): 4

Command (m for help): d
Partition number (1-4): 3

Command (m for help): d
Partition number (1-4): 2

Command (m for help): d
Selected partition 1
# 由于最后仅剩下一个 partition ,因此系统主动选取这个 partition 删除去!# 练习二: 开始新增,我们先新增一个 Primary  的分割槽,且指定为 4 号看看!
Command (m for help): n
Command action            <==因为是全新磁盘,因此只会问extended/primary而已
   e   extended
   p   primary partition (1-4)
p<==选择 Primary 分割槽
Partition number (1-4): 4<==配置为 4 号!
First cylinder (1-5005, default 1): <==直接按下[enter]按键决定!
Using default value 1               <==启始磁柱就选用默认值!
Last cylinder or +size or +sizeM or +sizeK (1-5005, default 5005): +512M# 这个地方有趣了!我们知道 partition 是由 n1 到 n2 的磁柱号码 (cylinder),# 但磁柱的大小每颗磁盘都不相同,这个时候可以填入 +512M 来让系统自动帮我们找出# 『最接近 512M 的那个 cylinder 号码』!因为不可能刚好等于 512MBytes 啦!# 如上所示:这个地方输入的方式有两种:# 1) 直接输入磁柱的号码,你得要自己计算磁柱/分割槽的大小才行;# 2) 用 +XXM 来输入分割槽的大小,让系统自己捉磁柱的号码。#    +与M是必须要有的,XX为数字

Command (m for help): p

Disk /dev/hdc: 41.1 GB, 41174138880 bytes
255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc4               1          63      506016   83  Linux# 注意!只有 4 号! 1 ~ 3 保留下来了!

在以上练习中,最终写入分割表的后核心竟然无法捕捉到分跟表信息,此时可以使用reboot来处理或者也可以使用GNU推出的工具来处置,那就是partprobe这个命令。这个命令就是告知核心必须读取新的分割表而已,因此屏幕上并不会显示出任何信息才是,这样就不需要我们再进行重启了

操作环境的说明以root身份运行硬盘的partition时,最好是在单人维护模式下比较安全一些,,此外,再进行fdisk的时候,如果该硬盘某个partition还在使用时,那么很有可能核心会无法重载硬盘的 partition table ,解决的方法就是将该使用中的partition给他卸除,然后在重新进入fdisk一遍重新写入 partition table ,就可以成功!!!就在刚刚 因为这个问题我重装了一遍系统 ,硬盘还在使用中我就给重新分割 ,直接over!!!

磁盘格式化

分割完毕后自然make要进行文件的格式化,这个命令非常简单,(make filesystem ,mkfd)

这个命令其实是个综合的命令,他会去呼叫正确的文件系统格式化工具软件

  • mkfs

[root@www ~]# mkfs [-t 文件系统格式] 装置文件名选项与参数:-t  :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)范例一:请将上个小节当中所制作出来的 /dev/hdc6 格式化为 ext3 文件系统
[root@www ~]# mkfs -t ext3 /dev/hdc6
mke2fs 1.39 (29-May-2006)
Filesystem label=<==这里指的是分割槽的名称(label)
OS type: Linux
Block size=4096 (log=2)<==block 的大小配置为 4K 
Fragment size=4096 (log=2)
251392 inodes, 502023 blocks<==由此配置决定的inode/block数量
25101 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=515899392
16 block groups
32768 blocks per group, 32768 fragments per group
15712 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (8192 blocks): done<==有日志记录
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
# 这样就创建起来我们所需要的 Ext3 文件系统了!简单明了!

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

当我们使用mkfs -t ext3 时,系统会去呼叫mkfs。ext3这个命令来进行格式化的动作。

另外还有mke2fs 这个命令 ,在这不多说 ,



磁盘检验 fsck badblocks

  • fsck

[root@www ~]# fsck [-t 文件系统] [-ACay] 装置名称选项与参数:-t  :如同 mkfs 一样,fsck 也是个综合软件而已!因此我们同样需要指定文件系统。      不过由于现今的 Linux 太聪明了,他会自动的透过 superblock 去分辨文件系统,      因此通常可以不需要这个选项的啰!请看后续的范例说明。-A  :依据 /etc/fstab 的内容,将需要的装置扫瞄一次。/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这是用来检查与修正系统错误的命令。注意,通常只有身为root 且你的文件系统在合格有问题的时候才是用

这个命令,正常情况下使用这个命令会对系统造成危害,通常使用这个命令的场合都是在系统出现极大的问题,导致你在linux启动的时候进入单人单击模式下进行维护的行为,才必须使用这一命令。

另外,如果你怀疑刚刚格式化成功的硬盘有问题的时候,也可以使用fsckl来检测一下硬盘。此外,由于fsck在扫描硬盘的时候,可能会造成filesystem的损坏,所以运行fsck时,被检查的patition无比不可挂载到系统上,一定是在卸除的状态下。

  • badblocks

[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.

刚刚说道的fask用来检查硬盘扇区有没有算换使用来检验文件系统是否出错至于badblocks硬盘扇区有没有坏轨的命令!目前大多不用这个命令

磁盘挂载与删除


单一文件系统不应该被重复挂载在不同的挂载点(目录)中;

单一目录不应该重复挂载多个文件系统。

要做为挂载点的目录,理论伤应该为空目录。

将文件系统挂载到linux‘系统上,使用mount 这个命令

[root@www ~]# mount -a
[root@www ~]# mount [-l]
[root@www ~]# mount [-t 文件系统] [-L Label名] [-o 额外选项] \ [-n]  装置文件名  挂载点选项与参数:-a  :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来-l  :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!-t  :与 mkfs 的选项非常类似的,可以加上文件系统种类来指定欲挂载的类型。      常见的 Linux 支持类型有:ext2, ext3, vfat, reiserfs, iso9660(光盘格式),      nfs, cifs, smbfs(此三种为网络文件系统类型)-n  :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序      的运行。但在某些情况下(例如单人维护模式)为了避免问题,会刻意不写入。      此时就得要使用这个 -n 的选项了。-L  :系统除了利用装置文件名 (例如 /dev/hdc6) 之外,还可以利用文件系统的标头名称      (Label)来进行挂载。最好为你的文件系统取一个独一无二的名称吧!-o  :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等:      ro, rw:       挂载文件系统成为只读(ro) 或可擦写(rw)      async, sync:  此文件系统是否使用同步写入 (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 让任何使用者运行 mount ?一般来说,                    mount 仅有 root 可以进行,但下达 user 参数,则可让                    一般 user 也能够对此 partition 进行 mount 。      defaults:     默认值为:rw, suid, dev, exec, auto, nouser, and async      remount:      重新挂载,这在系统出错,或重新升级参数时,很有用!
会不会觉得光是看这个命令的细部选项就快要昏倒了?如果有兴趣的话看一下 man mount ,那才会真的昏倒的。事实上 mount 是个很万用的命令,他可以挂载 ext3/vfat/nfs 等文件系统,由于每种文件系统的数据并不相同,想当然尔,详细的参数与选项自然也就不相同啦!不过实际应用时却简单的会让你想笑呢!看看底下的几个简单范例先!
  • 挂载Ext2/Ext3文件系统

范例一:用默认的方式,将刚刚创建的 /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 左右啦!


linux 有关磁盘,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。