硬盘与硬件管理

3.1 认识硬盘
    物理组成:主引导区(mbr),块(block),superblock(文件系统起始位置的block),inode
    这里要注意的是一个block最多容纳一个文件,所以当一个文件不足一个块的大小时,这个块剩下的空间也将被浪费.但是如果块太小,则磁盘的block会大增,造成inode在指向block时搜索的时间大大增加,即大文件读写效率低下。
    superblock,存储这个文件系统(每个磁盘分区就是一个文件系统)的相关信息,使用这个文件系统进行数据存储的时候,这是第一个要读的,如果superblock已坏,那么这个文件系统就丢失了.
3.2 查看硬盘或目录的容量
df  查看硬盘的总容量、已用容量与inode
du  查看文件已用容量
语法:df [选项]
  说明:df命令可显示所有文件系统对i节点和磁盘块的使用情况
 该命令各个选项的含义如下:
        -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。
        -k 以k字节为单位显示。
        -i 显示i节点信息,而不是磁盘块。
        -t 显示各指定类型的文件系统的磁盘空间使用情况。
       -x 列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。
   -T 显示文件系统类型。
    -h 使用人类可读的格式

例1:列出各文件系统的磁盘空间使用情况。
$ df
Filesystem 1 K-blocks Used Available Use% Mounted on
/dev/hda2 1361587 1246406 44823 97% /
df命令的输出清单的第1列是代表文件系统对应的设备文件的路径名(一般是硬盘上的分区);
第2列给出分区包含的数据块(1024字节)的数目;
第3,4列分别表示已用的和可用的数据块数目。
用户也许会感到奇怪的是,第3,4列块数之和不等于第2列中的块数。这是因为缺省的每个分区都留了少量空间供系统 管理员使用。即使遇到普通用户空间已满的情况,管理员仍能登录和留有解决问题所需的工作空间。
清单中Use% 列表示普通用户空间使用的百分比,即使这一数字达到100%,分区仍然留有系统管理员使用的空间。
最后,Mounted on列表示文件系统的 安装点。
例2:列出各文件系统的i节点使用情况。
$ df -ia
Filesystem Inodes IUsed IFree Iused% Mounted on
/dev/ hda2 352256 75043 277213 21% /
none 0 0 0 0% /proc
localhost:(pid221) 0 0 0 0% /net
例3:列出文件系统的类型。
$ df -T
Filesystem Type 1K-blocks Used Available use% Mounted on
/dev/hda2 ext2 1361587 1246405 44824 97% /
 本例中的文件系统是ext2类型的。

du(disk usage)
功能说明:显示目录或文档的大小。
语  法:du [-abcDhHklmsSx][--help][--version][目录或文档]
补充说明:du会显示指定的目录或文档所占用的磁盘空间。
参  数:
  -a或-all   显示目录中个别文档的大小。
  -b或-bytes   显示目录或文档大小时,以byte为单位。
  -c或--total   除了显示个别目录或文档的大小外,同时也显示任何目录或文档的总和。
  -h或--human-readable   以K,M,G为单位,提高信息的可读性。
  -k或--kilobytes   以1024 bytes为单位。
  -s或--summarize   仅显示总计
  --help   显示帮助。
  --version   显示版本信息。

df命令算出的文件系统使用块数的值与通过du命令得出的值是不一致的
该值差异的存在是由于du与df命令实施上的不同: du -s命令通过将指定文件系统中所有的目录、符号链接和文件使用的块数累加得到该文件系统使用的总块数;
而df命令通过查看文件系统磁盘块分配图得出总块数与剩余块数。
文件系统分配其中的一些磁盘块用来记录它自身的一些数据,如i节点,磁盘分布图,间接块,超级块等。这些数据对大多数用户级的程序来说是不可见的,通常称为Meta. Data。
du命令是用户级的程序,它不考虑Meta. Data,而df命令则查看文件系统的磁盘分配图并考虑Meta. Data。df命令获得真正的文件系统数据,而du命令只查看文件系统的部分情况。
  

3.3磁盘分割与格式化
fdisk    硬盘分区工具
e2label  修改硬盘的label(表头名称)的工具
mke2fs   liunx下重要的格式化工具
1.fdisk [-l] 设备名称
fdisk -l 直接列出该硬盘设备的 分区表,通过fdisk -l 可以直接查看机器所挂硬盘个数及分区情况
关于fdisk -l 一些数值的说明
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
这个硬盘是80G的,有255个磁面;63个扇区;9729个磁柱;每个 cylinder(磁柱)的容量是 8225280 bytes=8225.280 K(约为)=8.225280M(约为);
2.fdisk 设备名称
其实fdisk 设备名称最主要的工作是修改分区表,这个工具只有root才能执行,
设备名称不要加数字,因为分区是针对整个硬盘而不是某一个分区的.
fdisk的命令行用法为: fdisk 硬盘设备名
进入fdisk后,首先键入'm',即可显示fdisk全部菜单。
再键入'p',显示当前分区表状态。
键入'n',增加一个分区,然后会提示你选择分区类型(基本分区或扩展分区),再选择分区号(1-4)。注:每块硬盘最多可划分四个主分区(包括基本分区和扩展分区),其中:基本分区最多可划分四个,扩展分区最多可划分一个,但扩展分区内可再划分多个逻辑分区,选中你要建立的分区类型和分区号后,会提示输入起始柱面,从1开始;然后再输入终止柱面,此时可输入实际的柱面数,也可用"+分区尺寸"的方式输入,如:+1024M表示在起始柱面后加上1024M。主分区的设备名依次为:/dev/hda1,/dev/hda2,/dev/hda3,/dev/hda4,逻辑分区的设备名依次为:/dev/hda5,/dev/hda6,/dev/hda7...等等。
键入’d‘,删除分区,输入分区号即可删除。注意,删除扩展分区时,将会同时删除所有的逻辑分区。
键入’t‘,改变分区标志(这是Linux的fdisk最精华的部份!),新建的分区默认标志是83(Linux Ext2),你可以把它改为82(Linux 交换区)、或是'b'(FAT32)、'f'(FAT32 Extend,只限于扩展分区)、'86'(NTFS)。。。等几十种类型。这样一来,使用多操作系统的朋友们就可以用Linux的fdisk划分出你想要的所有分区了!
键入'a',切换分区激活开关。请注意:每键入一次,被选的分区就会在激活与非激活间变化一次,但你必须保证最后只有一个分区被激活。这时就用得到'p'命令了,被激活的分区上会有个'*'号。
除以上的几个命令外,还有其它几个,但不太常用。
最后,键入’w',你对分区所做的改变被写入硬盘;键入'q',则放弃所有的修改。

在fdisk完成后,需要用格式化工具mke2fs进行格式化,
    然后装载到指定目录(mount)
    mount -t ext3 /dev/sda2 /test
    或 修改/etc/fstab如下重新启动计算机就行了
    /dev/sda2 /test ext3 defaults 1 1

   3.mke2fs
   功能说明:建立ext2文件系统
    -b<区块大小>   指定区块大小,单位为字节。
    -c   检查是否有损坏的区块。
    -j   建立ext3这个具有日志管理功能的文件格式.
    -i   设定inode的值
    -L<标签>   设置文件系统的标签名称。
     [root@localhost beinan]# mkfs.ext3 /dev/sda6 注:把该设备格式化成ext3文件系统
     [root@localhost beinan]# mke2fs -j /dev/sda6 注:把该设备格式化成ext3文件系统
     [root@localhost beinan]# mkfs.ext2 /dev/sda6 注:把该设备格式化成ext2文件系统 
   4.e2label  
   这个指令主要是用来更改磁盘的表头数据,也就是设定磁盘代号,用在/etc/fstab中.这里的卷标和挂载的目录不是一个意思,卷标只是一个字符串,标识磁盘而已
   eg:
     显示文件系统的卷标:
    e2label /dev/hda5
     /home
    给磁盘设置加上卷标:
    mke2fs -j -L iscsi /dev/sdb1
    iscsi卷标名称,/dev/sdb1 磁盘设备
     更改文件系统卷标:
     e2label /dev/sdb1 iscsi66
    e2label的用法:
    [root@mail ~]# e2label
    Usage: e2label device [newlabel]
   
  3.4 检查硬盘坏轨与数据同步写入
   fsck 检查硬盘坏轨
     sync 数据同步写入
    1.fsck
    在/目录下有一个特殊的目录,即lost+found目录,就是当执行完fsck命令后,如果程序发现有任何错误文件,会将该文件的数据丢到这个目录当中.
   
     指令:fsck
使用方式 : fsck [-aACr]  filesys
说明 : 检查与修复 Linux 档案系统,可以同时检查一个或多个 Linux 档案系统
参数 :
filesys : device 名称(eg./dev/sda1),mount 点 (eg. / 或 /usr)
-A : 对/etc/fstab 中所有列出来的 partition 做检查
-C : 显示完整的检查进度
-a : 如果检查有错则自动修复
-r : 如果检查有错则由使用者回答是否修复
例子 :
检查  /dev/hda5 是否正常,如果有异常便自动修复 :
fsck  -a /dev/hda5
 注意 :
此指令可与 /etc/fstab 相互参考操作来加以了解。
    2.sync
 
     Linux 系统中欲写入硬盘的资料有的时候会了效率起见,会写到 filesystem buffer 中,这个 buffer 是一块记忆体空间,如果欲写入硬盘的资料存于此 buffer 中,而系统又突然断电的话,那么资料就会流失了,sync 指令会将存于 buffer 中的资料强制写入硬盘中

     3.5 关于启动盘
    mkbootdisk  制作启动软盘
      fdformat    用来低级格式化软盘
   
     3.6 硬盘的装载
  
     装载点就是该硬盘所在的目录,且该目录下的所有目录都属于该硬盘所有.装载硬盘的时候得先建立目录(即装载点)
   
    mount  装载文件系统
    umount  卸载文件系统 ( 除了直接指定文件系统外,也可以用设备名称或挂入点来表示文件系统。)
mount [-hV]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
说明 :
将某个档案的内容解读成档案系统,然后将其挂在目录的某个位置之上。当这个命令执行成功后,直到我们使用 umnount 将这个档案系统移除为止,这个命令之下的所有档案将暂时无法被调用。
  
 -V  显示程序版本
 -h   显示辅助讯息
 -a   将 /etc/fstab 中定义的所有档案系统挂上。
 -l   列出当前已经装载的设备、文件系统名称与装载点
 -t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
eg:
mount -t iso9660 /dev/cdrom /mnt/cdrom
装载光驱
mount -a
将 /etc/fstab 中定义的所有磁盘系统挂上
umount /home
直接卸载/home所在的文件系统.
 3.7 文件系统的装载
  1.装载windows分区
  使用fdisk指令可以知道windows分区在哪个硬盘,然后建立目录装载
eg:
  mkdir /mnt/win98
  mount -t vfat /dev/hda1 /mnt/win98---用fdisk知道/dev/hda1为win98分区
  mount -t vfat -o iocharset=cp950 /dev/hda5 /mnt/win98  ---iocharset=cp950可以让win98分区中的文件能正确显示中文
 
  2.硬盘的装载
 fdisk  设备名称                 --- 硬盘分区
 mke2fs 分区标识                 --- 格式化硬盘
 mkdir  目录名称                 --- 建立目录
 mount  分区标识  目录名称       ----  装载硬盘
  3.设定启动时的装载方式
 
  修改/etc/fstab 配置文件
  etc/fstab其实就是一个文本文件,用gedit或者vi都可以打开,当然,前提是root权限。在这个文件中,每个文件系统(包括分区或者设备)用一行来描述,在每一行中,用空格或TAB符号来分隔各个字段,文件中以*开头的行是注释信息。Fstab文件中的纪录的排序十分重要。因为 fsck,mount或umount等程序在做它们的工作时会按此顺序进行.
 
eg:
dev/hda2 / ext2 defaults 1 1
/dev/hdb1 /home ext2 defaults 1 2
/dev/cdrom /media/cdrom auto ro,noauto,user,exec 0 0
/dev/fd0 /media/floppy auto rw,noauto,user,sync 0 0
proc /proc proc defaults 0 0
/dev/hda1 swap swap pri=42 0 0
第一列表示设备的名称,第二列表示该设备的挂载点,第三列是文件系统,第四列是挂载选项,第五列是dump选项(用一个数字表示),第六列(接下来的数字)表示文件系统检查选项
 第一、二列:设备和默认挂载点

说实话,第一列和第二列的内容是最简单最直接的,它们的作用就是告诉mount命令,我想挂载什么分区或者什么设备,以及我所希望的挂载点在哪里。在fstab中为某一个设备指定的挂载点是其默认挂载点,也就是当你在挂载目录的时候没有手工指定其他目录的话,系统就将该设备挂载到这个目录。大多数 Linux发行版都会为挂载点创建专门的目录,大多数是在/mnt下
按照我们给出的fstab示例,如果你敲入命令
$ mount /dev/fd0
你的软驱就将挂载到/media/floppy,因为这是你告诉系统的软驱默认挂载点。如果没有这个信息,当你敲入mount命令时,mount会感到很困惑:该死的,你想让我把这玩意挂载到哪里去呢?当然,如果你看fstab中发行版给你指定的默认挂载点不顺眼,也可以自由修改它,修改成任何一个你希望的目录都可以。如果还不存在,就首先创建这个目录。要知道,fstab是不会把所有工作都给你包干的哦。
另外,有一些分区和存储设备是在Linux系统启动的时候就自动挂载的,比如,让我们看看刚才列出来的fstab示例信息,有两行是这样的:
/dev/hda2 / ext2 defaults 1 1
/dev/hdb1 /home ext2 defaults 1 2
正如刚才我们讲到的那样,这两行表示/dev/hda2默认挂载到/根目录,而 /dev/hdb1则默认挂载到/home目录,。这些工作在你Linux系统启动的时候就会通过读取fstab自动完成,否则的话……想象你会遭受什么样的折磨吧,所有的程序都在/根目录下,而你却无法使用,因为你没有挂载/根目录!
除了显示的使用设备名,你可以使用设备的UUID或设备的卷标签,例如,你可以在这个字段写成“LABAL=root”或“UUID= 3e6be9de- 8139-11d1-9106-a43f08d823a6”,这将使系统更具伸缩性。例如,如果你的系统添加或移除了一个SCSI硬盘,这有可以改变你的设备名,但它不会修改你的卷标签。
对于NFS mount操作,这个字段应该包含host:dir格式的信息,例如:knuth.aeb.nl:/,对于进程文件系统procfs,使用proc。
第三列:文件系统类型
fstab中的第三列指示了设备或者分区的文件系统类型。它支持很多种类的文件系统,我们在这里只介绍最为常用的。如果想了解你的kernel目前支持哪些文件系统,可以查看/proc/filesystems的内容。如果这个字段定义为swap,这条纪录将关联到一个用于交换目的的文件或分区。如果这个字段定义为ignored,这行将被忽略。这对于显示目前没有使用的分区非常有用。
ext2 和 ext3: 
reiserfs: ReiserFS是一个非常优秀的文件系统。也是最早用于Linux的日志文件系统之一,其机制比Ext3要先进得多,
swap: Swap,即交换区,把它想象成虚拟内存就行了。
vfat 和 ntfs:一看就知道是Windows分区格式了,呵呵。98,me等系统都是使用的vfat,也就是最流行的fat32格式,而NT系列则多使用NTFS,当然也不是固定的,因此2000或者XP系统要具体情况具体分析。当初Linux对NTFS的写入支持不好,所以大多数资料都建议用户使用vfat格式,但是现在支持已经很好了,
auto:当然,这不是一个文件系统类型。auto只是表示,文件系统的类型将被自动检测。在上面的示例中,你会发现软驱和光驱的文件系统类型都是auto,为什么呢?因为它们的文件系统类型随时都可能改变,比如软驱,优盘这种设备,可能今天是vfat格式,明天你就把它格式化成了ntfs,因此,最明智的做法就是告诉系统,我没法确定这东西的当前类型,还是你自己检测吧。
udf: 由于刻录光驱越来越流行,现在很多发行版自带的fstab中,光驱的文件格式类型是UDF,UDF是Universal Disc Format的缩写,与ISO 9660格式相容。它采用标准的封装写入技术(PW,Packet Writing)将CD-R/CD-RW当作硬盘使用,用户可以在光盘上修改和删除文件。利用UDF格式进行刻录时,刻录软件将数据打包,并在内存中临时建立一个特殊文件目录表,同时接管系统对光盘的访问。
iso9660: 很多光驱也使用的这个选项。ISO9660是一种描述适合CD盘片的电脑文件结构的国际标准。采用此标准的盘片可以在不同的操作系统上使用,如MAC和Windows。
第四列:挂载选项
fstab中的第四列表示设备或者分区所需要的挂载选项。这一列也是fstab中最复杂最容易出错的一列,只是分析最常用的一些选项,如果你想知道更多的东西,还是求助于man吧。
auto 和 noauto: 这是控制设备是否自动挂载的选项。auto是默认选择的选项,这样,设备会在启动或者你使用mount -a命令时按照fstab的内容自动挂载。如果你不希望这样,就使用noauto选项,如果这样的话,你就只能明确地通过手工来挂载设备。
user 和 nouser:这是一个非常有用的选项,user选项允许普通用户也能挂载设备,而nouser则只允许root用户挂载。nouser是默认选项,这也是让很多 Linux新手头疼的东西,因为他们发现没有办法正常挂载光驱,Windows分区等。如果你作为普通身份用户遇到类似问题,或者别的其他问题,就请把 user属性增加到fstab中。
exec 和 noexec: exec允许你执行对应分区中的可执行二进制程序,同理,noexec的作用刚好相反。如果你拥有一个分区,分区上有一些可执行程序,而恰好你又不愿意,或者不能在你的系统中执行他们,就可以使用noexec属性。这种情况多发生于挂载Windows分区时。exec是默认选项,理由很简单,如果 noexec变成了你/根分区的默认选项的话……
ro: 以只读来挂载文件系统。
rw: 以可读可写的属性来挂载系统。
sync 和 async:对于该文件系统的输入输出应该以什么方式完成。sync的意思就是同步完成,通俗点讲,就是当你拷贝一个东西到设备或者分区中时,所有的写入变化将在你输入cp命令后立即生效,这个东西应该立马就开始往设备或者分区里面拷贝了。而如果是async,也就是输入输出异步完成的话,当你拷贝一个东西到设备或者分区中时,可能在你敲击cp命令后很久,实际的写入操作才会执行,换句话说,就是进行了缓冲处理。
有时候这种机制蛮不错的,因为sync会影响你系统的运行速度,但是这也会带来一些问题。想一想,当你希望将一个文件拷贝到u盘上时,你执行了cp 命令,却忘记执行umount命令(它会强行将缓冲区内容写入),那么你拷贝的文件实际上并没有在u盘上面。如果你是使用的mv命令,而你又很快将u盘拔出……恭喜你,文件会从这个星球上消失的。因此,虽然async是默认属性,但是对于u盘,移动硬盘这种可移动存储设备,最好还是让他们使用sync选项。
defaults: 所有选项全部使用默认配置,包括rw, suid, dev, exec, auto, nouser, 和 async。
一般用户没有特殊需求,直接使用defaults就可以了。看完介绍,我们再回过头去看看前面的示例内容,以光驱为例,主要关注挂载选项这里,可以看到,光驱和其他分区设备的不同是ro,因为普通光驱是只读的。而exec则让你可以从光驱上直接执行某些程序。
第五、六列:dump和fsck选项
Dump和fsck?这是什么东西?恩,dump是一个 备份工具,而fsck是一个文件系统扫描检查工具。我不会在这里详细介绍它们,因为用man或者 google都可以获得更加详细的信息。
fstab的第五列是表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,事实上,大多数的dump设置都是0。而第六列是fsck选项,fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统/对应该字段的值应该为1,其他文件系统应该为2。若文件系统无需在启动时扫描检查,则设置该字段为0。

/etc/mtab文件的作用:
记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等,如果手动装载文件系统,这个mtab就会跟着变动;
而/etc/fstab是系统准备装载的。直接使用mount和确定就是通过查询它而来的。
 4.建立与装载虚拟内存文件
  A。建立swap分区:
  fdisk先建立一个分区,
  mkswap 分区来格式化为swap格式
  swapon 分区来启动swap
  B.建立虚拟内存文件
  dd指令建立swapfile
  mkswap 将swapfile文件格式化为swap格式
  swapon 启动该文件
  swapoff 关闭该文件
 dd指令
 功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。
 语法:dd [选项]
if =输入文件(或设备名称)。
of =输出文件(或设备名称)。
ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。
skip = blocks 跳过读入缓冲区开头的ibs*blocks块。
obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。
bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。
cbs = byte 一次转换bytes字节。
count=blocks 只拷贝输入的blocks块。
文件的容量是bs*count
eg:
dd if=/dev/zero f=/tmp/swap bs=4k count=16382
那么建立的swap文件的大小就为4*16382大约为64MB

你可能感兴趣的:(职场,休闲)