Linux磁盘管理

(一)分区

1、分区的本质:把一定数量的扇区划分为逻辑上的区域,由系统进行相应的管理。

1)硬盘的物理结构:

(1)磁道:当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨

                      迹,这些圆形轨迹就叫做磁道(Track)

(2)柱面:  在有多个盘片构成的盘组中,由处于同一半径的磁道组成的一个圆柱面(Cylinder)

  (3)   扇区:磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。硬盘的第一

                     个扇区,叫做引导扇区

2、通用规则:常用的数据放在硬盘内圈。例如windows系统安装在C盘。

3、分区的作用:

1)将数据保存在指定的范围内

2)便于逻辑上进行管理


4、服务器上Linux、UNIX分区优势:可以将存储数据随心所欲存放到任何位置,任何设备主机,方便

     调用。访问目录就是访问分区。


(二)格式化

1、本质:构建文件系统。

    构建文件的索引与文件数据之间的对应关系。

    注意:分区格式化后数据依然保留,格式化只是修改盘片相应的数据标识,删除文件的时候,并不

               删除数据,而是数据的标识和block可以被其他的程序所覆盖和重新使用,目录中block存放

               的inode和block的对应关系也被擦除。但磁记录还存放在盘片上。

               所以数据是可以恢复的,但是文件名或目录关系很难找回。


1)高级格式化:高级格式化又称逻辑格式化,它是指根据用户选定的文件系统(如FAT12、FAT16、

                             FAT32、NTFS、EXT2、EXT3等),在磁盘的特定区域写入特定数据,以达到初

                             始化磁盘或磁盘分区、清除原磁盘或磁盘分区中所有文件的一个操作。高级格式化包

                             括对引导记录分区表相应区域的重写、根据用户选定的文件系统,在分区中划出

                             一片用于存放文件分配表目录表等用于文件管理的磁盘空间,以便用户使用该分区

                             管理文件。简单来说,就是重新构建文件系统。

2)低级格式化:低级格式化(Low-Level Formatting)又称低层格式化或物理格式化(Physical

                             Format),对于部分硬盘制造厂商,它也被称为初始化(initialization)。大多数

                             的硬盘制造商将低级格式化(Low-Level Formatting)定义为创建

                             硬sector)使硬盘具备存储能力的操作。简言之,就是清除文件系统,硬盘磁

                             记录全部归零。

 (1)在Dos和windows下需要专用的工具低格;

 (2)linux下,执行dd if=/dev/zero of=/dev/sda命令低格,将硬盘全部置0。


2、linux支持的文件系统由内核编译方式决定。

     RHEL5支持的文件系统:

   cd /lib/modules/ 进入内核的模块文件目录

   cd 2.6.18-194.el5/ 进入指定的内核版本目录

   cd kernel/ 进入内核模块目录

   cd fs/ 放置文件系统模块,罗列着支持的所有文件系统

EBB-13、Linux磁盘管理_mkfs。fstab

  主要使用的文件系统:

  fat:

  vfat:

  ntfs:

  nfs:linux网络共享文件系统

  cifs:windows的网络共享文件系统

  ext2:RHEL3、4默认使用的文件系统

  ext3:RHEL5默认使用的文件格式,比ext2多一个日志功能。在非计划停机或意外重启时,如果发

            生存储数据的丢失,通过日志保证数据的完整性。

  iso9660:光驱文件系统

  reiserfs:对大量的小文件处理管理性能优异

  btrfs:


3、文件系统是一种数据逻辑管理方式。主要保存文件的索引和具体数据以及相应的对应关系。

  Linux文件系统(File System)是Linux系统的核心模块。


(三)磁盘分区命名方式

1、在Linux中,每一个硬件设备都映射到一个系统的文件,包括硬盘、光驱等IDE或SCSI设备。Linux

     把各种IDE设备分配了一个由hd前缀组成的文件。而各种SCSI设备,则被分配了一个由sd前缀组成

     的文件,编号方法为拉丁字母表顺序。

2、在Linux中规定,每一个硬盘设备最多能有4个主分区(其中包含扩展分区)。

    常见的Linux磁盘命名规则为hdXY(或sdXY),其中X为小写拉丁字母,Y为阿拉伯数字。个别系统

    可能命名略有差异。如:hda1 、hdb2、sdb2

EBB-13、Linux磁盘管理_mkfs。fstab_02

EBB-13、Linux磁盘管理_构建文件系统_03


(四)常用磁盘管理命令

 对于一个新硬盘,首先需要对其进行分区。和Windows一样,在Linux下用于磁盘分区的工具也是

 fdisk命令。除此之外,还可以通过cfdisk,parted等可视化工具进行分区。由于磁盘分区操作可能

 造成数据损失,因此操作需要十分谨慎。

 fdisk命令参数说明

 a 切换分区是否为启动分区

 b 编辑bsd卷标

 c 切换分区是否为DOS兼容分区

 d 删除分区

 l 打印linux支持的分区类型

 m 打印fdisk帮助信息

 n 新增分区

 o 创建空白的DOS分区表

 p 打印该磁盘的分区表

 q 不保存直接退出

 s 创建一个空的Sun分区表

 t 改变分区的类型号码

 u 改变分区大小的显示方式

 v 检验磁盘的分区列表

 w 保存结果并退出

 x 进入专家模式


1、fdisk -l 查看硬盘当前的分区

EBB-13、Linux磁盘管理_partprobe_04

  /dev/sda 设备名称,/dev设备文件目录。

2、fdsik /dev/sda 执行分区,注意fdsik 后跟的是设备名称,不是分区名称。

EBB-13、Linux磁盘管理_partprobe_05

  按下m键获取帮助

EBB-13、Linux磁盘管理_mkfs。fstab_06

  d删除一个分区

  l 列出已知的分区类型

  m 打印这个列表

  n 增加一个新的分区

  q 退出并不保存

  p 打印出分区表

EBB-13、Linux磁盘管理_mkfs。fstab_07

  w 保存对分区表的修改

  创建一个新的分区

EBB-13、Linux磁盘管理_partprobe_08

  1)询问创建主分区(primary partition)还是扩展分区(extended)

    MBR分区表中保存64字节的分区表,保存一个分区需要16个字节,所以分区表只能描述四个

    分区。

    输入e创建扩展分区,扩展分区默认从4开始,sda4,hda4;如果当前分区少于四个,询问创建主

    分区(p)或扩展分区(e);分区等于或大于四个不再询问,直接创建扩展分区(e)。

EBB-13、Linux磁盘管理_mkfs。fstab_09

  2)是否从上一个分区的末尾处开始分区,回车确定

EBB-13、Linux磁盘管理_构建文件系统_10

  3)分区的大小,可以输入 +size 或者磁柱数字表示,默认全分

EBB-13、Linux磁盘管理_mkfs。fstab_11

  4)输入p打印出来,显示出/dev/sda4分区

EBB-13、Linux磁盘管理_partprobe_12

  5)如果再次输入n执行创建,不在询问创建主分区还是扩展分区;分区的起始位置是从扩展分区的

    初始部分开始分子分区

    输入+100m,按p打印出来

EBB-13、Linux磁盘管理_mkfs。fstab_13

  6)现在的分区状态未写入分区表,按w键保存到分区表

EBB-13、Linux磁盘管理_partprobe_14

  7)提示重新启动后使用新的分区表;但是在生产中,由于设备不能随便重新启动。

    所以通过执行partprobe 命令重新加载分区,内核动态的重新读取一次分区表。

EBB-13、Linux磁盘管理_partprobe_15

    注意:在RHEL6的早期版本,如6.1等早期版本中,partprobe有bug,必须重新启动,系统才会使

          用新的分区表。


要使用分区还需要构建文件系统

3、构建文件系统

  mkfs mkfs.ext3等命令

1)mkfs -t ext3 /dev/sda5

  -t 指定格式化的文件系统的类型

EBB-13、Linux磁盘管理_partprobe_16

  filesystem label 当前文件系统卷标

  OS type :操作系统类型

  Block size:一个文件系统block,文件系统中存放数据的最小单位,这里是1024个字节

  2048 inodes per group :一个分区组中有2048个inodes

2) mkfs其他常用参数

  (1)-b

     ext文件格式下,block大小会影响数据读取I/O的性能。

     在盘片的旋转速度,机械臂的寻道时间相同的情况下,提高I/O效率的手段是将数据连续性存

     储。所以block越大,I/O效率越高;但是block大,可能会造成存储空间的浪费,磁盘的碎片

     大,存储性能下降。

     所以需要合理的规划存储空间大小以及分配相应的文件大小。

  (2)-i 创建inode的数量,对当前inode使用量的预估。

        多大空间对应一个inode标识。一般默认即可。

   <1> EBB-13、Linux磁盘管理_partprobe_17

   <2>

       dd if=/dev/zero of=/tmp/test.img bs=1M count=100

EBB-13、Linux磁盘管理_partprobe_18

       执行mkfs –t ext3 /tmp/test.img

       格式化/tmp/test.img文件

EBB-13、Linux磁盘管理_构建文件系统_19

       提示该文件不是一个块文件。输入y确认继续执行。

       所以文件也可以执行格式化。

EBB-13、Linux磁盘管理_mkfs。fstab_20

       该文件可以直接挂接,但是系统会提示该文件不是一个块的设备,或许应该使用 –o loop参  

       数以环回设备方式进行挂接。

EBB-13、Linux磁盘管理_mkfs。fstab_21

       在该文件下可以创建、写入文件。也可以卸载目录。查看该文件时,显示该文件格式为ext3

       文件。


4、挂接的本质:

  要使用磁盘分区,就需要挂载该分区。挂载时需要指定需要挂载的设备和挂载目录(该目录也成为

  挂载点)。

1)dumpe2fs /dev/sda5 | less 查看分区格式化后的记录

EBB-13、Linux磁盘管理_mkfs。fstab_22

   filesystem volume name:磁盘的卷标名称

2)挂载磁盘分区的命令为mount,常用的命令格式如下所示:

   mount -t type device dir

   mount –t vfat /dev/hdb2 /tmp

   例如:

   mount /dev/sda5 /mnt

EBB-13、Linux磁盘管理_构建文件系统_23

3)查看磁盘的挂载情况,直接输入不带参数的mount命令即可。

EBB-13、Linux磁盘管理_构建文件系统_24


5、 卸载磁盘分区

   要移除磁盘,例如卸载USB磁盘、光盘或者某一硬盘分区,则需要首先卸载该分区。卸载磁盘的命

   令为umount,常用的命令格式如下所示:

   umount [device|dir]

   umount /hdb2

   或umount /tmp

   注意:卸载之前必须退出该目录,并确定目录下文件未被访问使用,否则会出现卸载失败。

6、 mount 其他常用参数

   vi /etc/fstab

EBB-13、Linux磁盘管理_mkfs。fstab_25

   1)LABEL=/ 挂接的设备,一般以卷标名书写的,也可以用设备名称,为了避免设备加载顺序出现  

              名称变化。所以一般以卷标书写。

   2)/ mountpoint挂接点

   3)ext3 以什么样的文件系统挂接, 由于ext文件系统向下兼容,所以在这可以以ext2文件系统挂

           接,但是会丧失ext3比ext2多出的功能。如果以其他文件系统挂接则会报错

   4)defaults 挂接参数


   man mount

   /-o 指定挂接的参数

EBB-13、Linux磁盘管理_partprobe_26

   async:同步挂接方式

   atime:记录文件的修改时间

   auto:开机自动挂载

   defaults:默认支持rw(只读方式挂接),suid(让分区支持suid),dev(以dev设备挂接),    

            auto(开机自动挂接),nouser,支持async

   noauto:开机不自动挂载

   nouser:只有超级用户可以挂载

   ro:按只读权限挂载    
   rw:按可读可写权限挂载    
   user:任何用户都可以挂载    
   noexec:不允许可执行文件执行,注意千万不要把根分区挂载为noexec,那就无法使用系统了,

           连mount命令都无法使用了,这时只有重新做系统了!

   nodev:不允许挂载设备文件    
   nosuid,nosgid:不允许有suid和sgid属性

   注意:光驱和软驱只有在装有介质时才可以进行挂载,因此它是noauto.


   5)1 执行dump检查的时候自动将相应分区备份。

        0是指dump(系统备份工具)。这一项为0,就表示从不备份。如果上次用dump备份,将显示

         备份至今的天数。1为一天一次,2为两天一次

   6)1 开机过程中检测是否需要执行fsck命令。

        order 指fsck(启动时fsck检查的顺序)。

        为0就表示不检查,1为第一个检查,2为第一的检查完了,检查值为2的 ,(/)分区永远都

        是1,其它的分区只能从2开始,当数字相同就同时检查。如果要把第二块SATA硬盘上的

        windows C 区挂到文件系统中,那么数据项是:/dev/sdb1 /c vfat defaults 0 0 (/c 是

        事先建立的文件夹,作为c盘的挂载点。)当你修改了/etc/fstab后,一定要重新引导系统或  

        执行mount -a才会有效。


        对于已经挂载好的设备,现在要改变挂载参数,这时可以不用卸载该设备,而可以使用下面

        的命令(没有挂载的设备,remount 这个参数无效)    
        mount /mnt/D/ -o remount,ro (改defaults为ro)


7、对于没有正常卸载的磁盘,如遇突然断电的情况,可能会造成文件系统目录结构或文件损坏。因

  此,遇到这种情况需要检查和修复磁盘分区。检查和修复磁盘分区的命令为fsck,其常用的命令格  

  式如下:

  fsck [options] device

  umount /hdb2

  fsck /hdb2

  fsck常用选项

  -t type 指定分区的类型。指定后fsck不自动检测分区类型,可提高检测速度

  -p 不提示用户直接修复

  -y 自动回答yes

  -c 检测坏块

  -f 强制检测,即使系统标志该分区无问题

  -n 只检测,不修复

  -v Verbose互动模式



8、创建卷标名

1)e2label /dev/sda5 /mnt

EBB-13、Linux磁盘管理_构建文件系统_27

EBB-13、Linux磁盘管理_构建文件系统_28

 现在filesystem volume name 名称为/mnt

2)执行mount显示未挂接/dev/sda5 到/mnt

EBB-13、Linux磁盘管理_partprobe_29

3)编辑/etc/fstab文件,添加

  LABEL=/mnt /mnt ext3 defaults 0 0

EBB-13、Linux磁盘管理_构建文件系统_30

4)使用mount –a 命令参照/etc/fstab文件内容重新挂接

EBB-13、Linux磁盘管理_partprobe_31

  显示/dev/sda5挂载成功

7、 swap:交换分区

1)free命令查看内存和交换分区的使用

EBB-13、Linux磁盘管理_构建文件系统_32

  一般情况下swap设置为内存的两倍(8G以下内存);8G以上的内存swap设置为和内存相同的容量。

2)fdisk /dev/sda 新建一个分区

EBB-13、Linux磁盘管理_mkfs。fstab_33

3)partprobe重新加载分区表

  fdisk –l 显示sda6添加完成

EBB-13、Linux磁盘管理_构建文件系统_34

4)mkswap /dev/sda6 创建swap分区

EBB-13、Linux磁盘管理_mkfs。fstab_35

5)swapon /dev/sda6 加载交换分区

EBB-13、Linux磁盘管理_mkfs。fstab_36

6) swapoff /dev/sda6 卸载交换分区

EBB-13、Linux磁盘管理_partprobe_37

7)通过mount命令看不到swap的挂接;

  通过fdisk –l ,系统类型ID标识为82,

  ID标识与分区本身实际用途没有关系,仅仅是一种标识;

  ID标识只是可以方便查看分区类型

EBB-13、Linux磁盘管理_mkfs。fstab_38

8)修改ID标识,

  fdisk /dev/sda

  t 参数

EBB-13、Linux磁盘管理_partprobe_39

  Hex code可以输入L来查看编码

EBB-13、Linux磁盘管理_partprobe_40

9)fdisk –l查看

EBB-13、Linux磁盘管理_构建文件系统_41

8、如何将数据迁移到新的分区,并把分区挂载到原来的目录上继续使用

1)将创建并已经格式化的/dev/sda5分区挂载到/mnt目录下,然后拷贝/home目录下的数据到/mnt下

EBB-13、Linux磁盘管理_partprobe_42

2)由于cp拷贝文件时,会将文件所有者所有组改变。所以重新设定文件所有者和所有组,执行

  chown -R afu. afu/

EBB-13、Linux磁盘管理_构建文件系统_43

3)退出/mnt目录,卸除挂载

EBB-13、Linux磁盘管理_构建文件系统_44

4)进入到/home目录,删除所有文件

EBB-13、Linux磁盘管理_partprobe_45

5)现在将/dev/sda5 挂载到/home目录下

EBB-13、Linux磁盘管理_构建文件系统_46

6)现在切换用户,显示正常

EBB-13、Linux磁盘管理_构建文件系统_47

  并且相应文件依然存在

EBB-13、Linux磁盘管理_partprobe_48