13.Linux基础:磁盘管理

来源:互联网 发布:盘锦企业数据 编辑:程序博客网 时间:2024/06/05 14:59
原文地址:13.Linux基础:磁盘管理作者:张伟

 1. 扇区是硬盘上最小的存储物理量,一个扇区的大小约为512KB

    逻辑块是在分区进行文件系统的格式化时所指定的最小存储单位,块的大小为扇区的2n次方倍,一个块只

           能容纳一个文件,并不是越大越好,文件系统开始的块叫超级块

   硬盘存储容量=柱面x磁头x扇区x512KB

    硬盘分区的要点,就是要记录每一个分区的起始与结束柱面,记录此信息的数据存放在MBR,MBR就在第一块

          硬盘的0轨上,系统必须读取的一个区,记录了磁盘里所有的分区信息,MBR最大的限制是其大小不能

         大到存储所有分区与引导程序的信息

 2. EXT2文件系统

    文件分为两个部分存储,一个是文件属性(存放在inode),一个是文件内容(存放在块区域).格式化成

       EXT2的时候会有inode表和块区域。inode记录该文件的相关属性,以及文件内容存放在哪一个块文件

       中(需要具备指针功能),inode记录包括:拥有者,用户组,访问权限rwx,文件类型,建立时间,文件

       大小,文件属性标志,指针。

        目录:inode记录该目录的相关属性,并指向分配到的那个块

             块记录在这个目录下的相关文件(或目录)的关联性

       文件:inode本身不记录文件名,文件名记录在目录所属的块区域,文件的相关连接会记录在目录的块数

             据区域,所以要读取一个文件的内容时,linux会先由根目录/获取该文件的上层目录所在的

            inode,再由该目录所记录的文件关联性,(在该目录所属的那块区域)获取该文件的inode,最后通

             过inode内提供的块指针来获取最终的文件内容。z形传递

       目录最大的功能是提供文件的关联性,包括文件名与inode的对应数据,计算机使用inode号码来引用文

                                  件,人使用文件名来引用文件,目录是文件名与inode号码之间的映射表

       块与inodes在一开始格式化时就已经固定了

      一个分区能够容纳的文件数与inode有关

      一般来说,每4KB的硬盘空间分配一个inode

      一个inode的大小为128KB

       块为固定大小,当前支持1024/2046/4096字节等

       块越大,损耗的硬盘空间越多

      对于单一文件,若块大小是=1024,最大容量为16GB;若块大小=4096,最大容量为2T

      对于整个分区,若块大小是=1024,则容量为2TB;若块大小=4096,最大容量为32T

      EXT2一个文件块组包含:超级块,组描述,块位图,inode位图,inode表,数据块

      cp和inode:分配一个未用的inode号,在inode表中添加一个新项目

                在目录中创建一个dentry,关联文件名和inode号

                把数据复制到新文件中

      mv和inode:目标和源在同一个文件系统中,会使用新文件名新建目录项目。删除带有原文件名的原有目

                 录项目。对inode表中除时间戳外毫无影响,对数据在磁盘上的位置毫无影响

                目标和源不在同一个文件系统中,mv的命令就是复制和删除

      rm和inode:减少链接数量,从而释放inode号(此号可重新利用)。把数据块放在可用空间列表中。删除目

                 录项目。

                导致目录中的项目有效的删除了,所用的inode号被释放了,文件所用块也被收回到空闲空间

                 列表

       dumpe2fs /dev/hda1   列出某个区文件系统内的上述信息

      inode表与区域称为数据存放区,其他的统称为元数据。断电等可能会导致数据不一致,EXT3的日志功能

                可解决此问题

      为了加快Linux访问速度,系统通常采用异步处理的方式     

      ls -l /lib/modules/"uname-r"/kernel/fs            查看支持哪些文件系统

      cat/proc/filesystems                              查看当前已启用的文件系统

       df-h  /etc    列出将系统内/etc下每个目录磁盘空间用量,已用空间总量和空闲空间总量

      du  /etc        列出/etc目录下的所有文件的总容量(个数)

       硬连接只是在某个目录下新增一个该文件的关联数据而已,是添加了另一个额外的指向数据块的路径名

               (用inode连接,删除源文件也没问题能继续打开,就跟完全复制过去一样,是增加了以一个

                指向数据块的链接),硬连接不能跨文件系统,不能连接目录,(复制个文件并且在文件里

                建立链接,源没了,他还会有),特点是inode号相同,没有单独的文件类型。可以理解为又

                新建了一个指向数据块的链接。

       软连接(快捷方式),源文件没了,就连不上了,软连接所建立的文件为一个独立的新文件,会占用

                inode与块,基本无限制,可以在不同文件系统中。inode号不同。是符号连接型文件。可以

                理解为指向一个文件数据块硬链接的链接(大小是硬链接的路径名的字符个数)

       ln   /tmp/passwd  passwd-hd  将/tmp/passwd创建硬连接成为passwd-hd文件

       ln -s/tmp/passwd   passwd-so  将/tmp/passwd创建软连接成为passwd-so文件

              当建立新目录时,新目录的连接数为2,而上层目录的连接数则会加1

3.只有root才能fdisk(单用户模式更好),分区是针对整个硬盘,而不是某个小分区,所以设备名字不要加数字

        fdisk是修改分区表(删除分区,新增分区),但并没有将硬盘实际划分,只是定义某个分区是从n1柱面

       到n2柱面,如果分区错误,只要在格式化之前将分区表复原,就可以将硬盘数据挽救回来,应该时常备

       份分区表

 sfdisk        比fdisk更准确灵活的分区程序

 mke2fs -j -L “logical” -b 2048 -i4096  /dev/hdb5     (创建文件系统)

               将/dev/hdb5格式化为ext3,且名称为logical,块改为2048,inode改为4096

 mke2fs -j /dev/hda5或mkfs.ext3/dev/hda5   格式化成ext3格式,两命令无任何区别

 tune2fs -j /dev/sda5  ext2格式无损数据转化成ext3

 sync      直接将系统暂存在内存中的数据写入磁盘(系统还得支持)

       实例:新建一个500M的分区并格式化为ext3文件系统,并挂载到/newdisk下

       解答:(1)执行命令"fdisk -l",查看当前系统内的所有分区

             (2)执行命令"fdisk /dev/hda",查看/dev/hda内的相关信息

                 输入参数p回车查看现有分区信息

                 输入参数n回车,根据提示再输入参数e,回车二次确定起始柱面和中止柱面,将剩余空间创

                                                                                    建成扩展分区

                 输入参数n回车,再回车,根据提示输入命令"+500M"回车,创建一个500M大小的分区

                  输入参数p回车,查看最新分区信息。最下面的/dev/hdaX即为刚刚创建的500M大小分区

                 输入参数w回车,保存以上配置

              (3)执行命令"partprobe",重新设置内存中的内核分区表版本

               (每次使用fdisk改变分区都要使用此命令) 

              (4)执行命令"mkfs.ext3/dev/hdaX",把新建的500M分区格式化为ext3系统

             (5)执行命令"vim /etc/fstab",添加如下信息

                 /dev/hdaX /newdisk ext3 defaults 0 0

              (6)执行"mount-a",让系统重新执行fstab文件进行挂载

              (7)执行"mount",查看/dev/hdaX分区是否已经被挂载到/newdisk

 4.载入点是分区所在的目录,且该目录下的所有目录都归该分区所有。另外载入了文件系统之后,原目录

        下的文件就会暂时消失

       /etc/fstab    系统分区目录载入情况,/etc/fstab是启动时的设置文件,实际文件系统的载入记录

                      到/etc/mtab与/proc/mounts这两个文件,每次更改文件系统的载入时,都会同时改这

                     二个文件,在启动时,/etc/rc.sysinit使用/etc/fstab挂载所有文件系统,该文件系统

                     中的所有条目必须正确,否则系统将无法正常引导.每次系统引导至生成所需的文件系

                     统体系时都会参考/etc/fstab,其内容大致如下

                      #device         mount_point FS_type options  dump_freq  fsck_order

                      LABEL=/mnt/data /mnt/data  ext3   defaults          0

                     quota的开启关闭功能都要看options是否有usrquota

                     acl的开启关闭要看options是否有acl 

                     optopns内容的添加需要重新挂载这个分区才能有效

                      /etc/fstab文件的错误会导致rc.sysinit失败并引导至sulogin(紧急模式)

       /etc/mtab    文件系统实际载入的记录文件,一般来说,我们通过编辑/etc/fstab后重新载入文件系

                     统的方法,来让系统的文件系统支持磁盘配额.

       mount 只有root可以使用

       mount    将系统所有的已载入的分区数据列出来(读取/etc/mtab)

        mount-a  将整个系统中记录的文件系统与载入点对应的数据(记录在/etc/fstab文件中)全部载入

        mount-t ext3 /dev/hdb5  /mnt/hdb5  将/dev/hdb5载入到/mnt/hdb5,设备和挂载点参数如只有一

                                             个,须有/etc/fstab文件来提供其余的信息  

       umount/tmp/home                      卸载/tmp/home(不能卸载正在使用的文件系统)

       mount -o remount,rw /dev/hda5/      自动更改挂载的文件系统的选项

       fuser                                显示正在使用文件系统的进程信息

       mknod  /dev/hda10 b 310             建立/dev/hda10磁盘存储设备

        blkid                                可以看到所有设备的标签和文件系统类型

       e2label   /dev/hdb5 hdb5            修改磁盘的表头数据,即卷标(不可随意修改)

       mount LABEL=hdb5/mnt/data           挂载文件系统

       tune2fs -l/dev/hdb5                  类似dumpe2fs-h ,读出超级块内的数据,用dumpe2fs浏览

                                             当前设定,该命令还显示文件系统的格式,该命令还可以调

                                             整文件系统参数:保留块,默认挂载选项,fsck频率

        只有载入分区的目录(即载入点)才会有lost+found目录

5.建立虚拟内存

  虚拟内存就是将硬盘规划出一个区间,让内存的数据可以通过硬盘来读取,交换分区是系统RAM的补充

   第一种:设置一个swap分区,增加一个硬盘,将其中某个区规划为swap的文件系统

       首先,利用fdisk /dev/hd[a-d]先建立一个分区。即先建立一个分区,然后将该分区的ID改为82,也就

                                                                     是虚拟内存的磁盘文件格式代号

        然后,使用mkswap/dev/hd[a-d][1-16]将刚刚建立的分区格式化为swap的文件格式

            在/etc/fstab文件中添加交换空间的条目如下 /dev/hda6 swap swap defaults 0 0

            swapon -a 激活交换分区(该命令可读取/etc/fstab文件,并开启它列出的所有交换条目)

            swapon -s 检查交换分区的状态

            设定交换文件  dd if=/dev/zero of=/swapfile bs=1024count=X

            运行mkswap命令创建签名,交换文件可用swapon手动激活,或在/etc/fstab文件中添加条目:

                   /swapfile swap swap defaults 0 0

       最后,启动swap,启动的命令为swapon/dev/ha[a-d][1-16]     (swapoff关掉虚拟内存)

   第二种:建立一个虚拟内存的文件     

        首先,使用dd命令建立swap文件

       然后,使用mkswap将swap文件格式化为虚拟内存的文件格式

       然后,使用swapon启动该文件,使其成为虚拟内存

        最后,使用swapoff来关闭该文件

6.磁盘配额

      基本限制:仅针对整个分区,核心必须支持磁盘配额,磁盘配额使用记录文件,只对一般身份用户有效

      quota -av      显示出各个用户的磁盘配额

      requota          生成磁盘的总配额报告

     quotacheck-avug 主要是扫描某个磁盘的配额空间,将所有在/etc/mtab内含有磁盘配额支持的分区扫

                      描,扫描结束后,所得磁盘结果会写在该区最顶端(quota.user,quota.group)

     edquota -p user1 user2 让user2模仿user1的策略

      edquota-t      建立缓冲时间   

     实例:用户kyle在/home/kyle最低限制为40K,当添加80K数据时会提示超出磁盘配额信息测试

          dd if=/dev/zero of=/home/kyle/test bs=1k count=80

     解答: (1)执行命令vim /etc/fstab,修改以下一行参数

               /dev/vg0/home /home defaults,usrquota,grpquota 0 0

           (2)执行mount -o remount /home 或umount /home,mount /home重新挂载home目录

              (只要defaults那栏加东西例如usrquota,acl,这块挂载磁盘就要重新挂载)

           (3)执行命令quotacheck -avug,创建quota库文件

              (会在限制磁盘目下查到,本例中可以在/home下看到创建了aquota.user库文件)

           (4)执行命令quotaon -av,启动/home目录的quota功能

            (5)执行命令edquota-u kyle,修改或添加如下一行,设置用户kyle的磁盘配额限制值

               /dev/vg0/home0 40 80 0 0

           (6)执行命令repquota -av,查看quota结果

           (7)切换到kyle使用dd命令测试,注意别忘了把测试产生的文件删除

7.linux分区的命名————/dev/xxyN
  /dev/  此字串是所有设备文件所在的目录名。因为分区在硬盘上,而硬盘是设备,所以这些文件代表了

         在/dev/上所有可能的分区。
 xx 分区名的前二个字母标明分区所在设备的类型。通常是hd(IDE磁盘)或sd(scsi磁盘)
 这个字母标明分区所在的设备。例如,/dev/hda(第一个IDE磁盘)或/dev/sdb(第二个scsi磁盘)
 最后的数字代表分区。前四个分区(主分区或扩展分区)是用数字从1排列到4。逻辑分区永远从5开始。例

   如,/dev/hda3是在第一个IDE硬盘上的第三个主分区或扩展分区,/dev/sdb6是在第二个scsi硬盘上的第二

    个逻辑分区

8.LVM,可以将几个物理分区通过软件组合在一起,灵活的管理硬盘,让磁盘可以随时放大或缩小

    PV,物理卷,一块磁盘变成PV后,LVM才能使用该分区

     VG,卷组,它将多个PV组成一个磁盘,LVM就是为了建立VG

     PE,物理扩展,类似于块(一个VG可包含65534个PE,PE=4MB时候,VG最大容量为256G,)

     LV,最后载入到文件系统的分区,是由VG分割而来

     数据写入LV时的两种模式:线性模式(一个一个磁盘写)和交错模式(一起写)

     LVM不追求性能,只追求能够管理,所以默认为线性模式。若强调性能,可使用RAID而不是用LVM 

 LVM创建的抽象层比传统的Linux磁盘和分区的抽象层级别更高,在物理设备间可轻松的重新设定和删除逻辑卷

  允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小

   任何当作物理卷使用的磁盘分区都需要将其分区类型设为0x8e           

   实例1/3:创建一个卷组vg0,大小为2G,从中创建出逻辑卷命名为lvm,大小为1G,使其可用,并开机挂载到/lvm

   解答:(1)"fdisk /dev/hda"创建一块2G大小的新分区

         (2)"partprobe",让内核重新读取硬盘分区表

         (3)"pvcreate/dev/hdaX",创建物理卷,详情可通过命令"pvdisplay"查看

         (4)"vgcreatevg0 /dev/hdaX",创建卷组vg0,详情可通过命令"vgdisplay"查看

         (5)"lvcreate-L 1024M /dev/vg0 -n /dev/vg0/lvm" 创建逻辑卷lvm,大小为1G

              详情可通过"lvdisplay"查看

         (6)"mkfs.ext3/dev/vg0/lvm",将逻辑卷lvm格式化为ext3文件系统

         (7)"vim/etc/fstab",修改或添加如下

              /dev/vg0/lvm /lvm ext3 defaults 0 0

         (8)"mount -a",让系统重新执行fstab文件重新挂载

         (9)"mount",查看逻辑卷lvm是否被挂载到/lvm

   实例2/3:将/lvm动态扩充到1.5G

  解答:(1)"mount",查看挂载点/lvm挂载的分区(为/dev/vg0/lvm)

       (2)"umount /lvm",卸载/lvm挂载点挂载的分区,正在使用中的分区不能扩充/缩小

        (3)"lvextend-L +512M /dev/vg0/lvm" 将逻辑卷扩充到1.5G

       (4)"e2fsck-f /dev/vg0/lvm"检查分区完整性,是否有坏轨

           (在"resize2fs"命令之前必须用"e2fsck-f"检查)

       (5)"resize2fs /dev/vg0/lvm",将新添加的磁盘空间格式化

       (6)"mount-a" 重新挂载分区到/lvm

   实例3/3:将/lvm动态减缩到512M

  解答:(1)"mount",查看挂载点/lvm挂载的分区(为/dev/vg0/lvm)

       (2)"umount /lvm",卸载/lvm挂载点挂载的分区,正在使用中的分区不能扩充/缩小

       (3)"e2fsck-f /dev/vg0/lvm"检查分区完整性,是否有坏轨

           (在"resize2fs"命令之前必须用"e2fsck-f"检查)

       (4)"resize2fs /dev/vg0/lvm 512M",调整分区大小

       (5)"lvreduce /dev/vg0/lvm -L 512M"减小逻辑卷大小

       (6)"mount-a" 重新挂载分区到/lvm

  扩展vgextend vgtest/dev/sda9

  建立时的顺序是pv,vg,lv.删除时的顺序是lv,vg,pv

9.逻辑卷管理器快照

   快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝

  对于需要备份或复制现有数据集临时拷贝以及其他操作来说,快照是最合适的选择

   快照只有在他们和原来的逻辑卷不同时才会消耗空间

     在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或快照有所改变时才会使用这些空间

     快照中只含有原来的逻辑卷中更改的数据或自生成快照后的快照中更改的数据

   常用的快照包括:

     备份实际数据,应用程序测试,集合虚拟化机器

  为现有逻辑卷创建快照  lvcreate -l 64 -s -n databackup/dev/vg0/data

  挂载快照             mount -o ro /dev/vg0/databackup /mnt/databackup

  删除快照             lvremove  /dev/vg0/databackup

  lvdisplay     /dev/vg0/databackup   确定快照分配空间的大小

  快照可扩展到其它逻辑卷可扩展的大小   lvextend -L+64M /dev/vg0/databackup

10.RAID:多个磁盘合成一个阵列提供更好的性能,冗余

   RAID 0条带:两个以上的磁盘创建一个高性能卷,同样大小的性能更好,无冗余,阵列大小为磁盘总大小和

   RAID 1镜像:两个磁盘含有同时更新的相同数据,有冗余,写入性能低,读性能高,唯一可以防止/boot分区

              的RAID,阵列大小是最小磁盘的大小

   RAID5    :三个以上磁盘组成,有冗余,读写性能都不错,有时候写性能低,不适用主机数据库

  RAID设备可命名为/dev/md0,/dev/md1等等,一旦生成阵列,会与普通磁盘设备一样起作用

 实例:创建两个大小分别为1G和2G的逻辑分区,并将这两个分区做成RAID0,并且开机挂载到/md0

  解答:(1)"fdisk/dev/hda"建立两个大小分别为1G和2G的逻辑分区/dev/hda9,/dev/hda10

            输入参数t,输入参数9,输入fd参数,修改/dev/hda9分区类型为RAID

            输入参数t,输入参数10,输入fd参数,修改/dev/hda10分区类型为RAID

        (2)"partprobe",让内核重新读取硬盘分区表

       (3)"mdadm -C /dev/md0 -l 0 -n 2 /devhda9/dev/hda10",创建raid分区md0

       (4)"mkfs.ext3/dev/md0",格式化md0分区

           可以用"mdadm --detail /dev/md0"查看验证raid分区是否OK

       (5)"vim/etc/fstab",添加或修改如下一行参数

           /dev/md0 /md0 ext3 defaults 0 0

        (6)"mount-a",让系统重新执行fstab文件重新挂载

       (7)"mount",查看/devmd0是否被挂载到/md0

11.RAID测试与修复

 磁盘修复非常简单。关闭系统,替换掉出故障的磁盘,开启系统,并在磁盘上重建正确的分区表。用

  mdadm /dev/md0 -a /dev/sda1命令可将新磁盘添加到阵列中,必须用mdadm -r将失败的磁盘从阵列中删除。

 默认情况下,磁盘故障信息会通过系统syslog保存在var/log/messages文件中

  有关软件RAID设备的当前状态信息保存在/proc/mdstat文件中

 
0 0