Linux下:磁盘管理和文件系统管理

一、 磁盘基础知识
本章学习之前需要了解以下几点:
  •强调: Linux里面一切皆文件。
  •I/O Ports即I/O设备地址,用来标识硬件对应的设备地址,来让操作系统以及cpu使用。
  •注意: CPU的核数不一定就是越多越好,由于CPU协调之间的问题,性能可能不升反降。

1、 设备文件
  ①、什么是设备文件
    设备文件会关联至一个设备驱动,进而能够跟与之对应的硬件设备进行通信
  ②、设备文件分类:
    •块设备:block。存取单位"快"。典型代表:磁盘
    •字符设备:char,存取单位"字符"。典型代表键盘

  ③、设备文件路径:

    # /dev/dev_file

  ④、设备号码标识:
    主设备号:major number,标识设备类型
    次设备号:minor number,标识同一类设备号下的不同设备

[root@oldboy dev]# ls -l /dev/ | grep "sda"
lrwxrwxrwx. 1 root root           4 May 23 16:37 root -> sda3
brw-rw----. 1 root disk      8,   0 May 29 05:40 sda    【注意:这是同一设备类型,所以主设备号都是8,由于是同一设备类型下的不同设备,所以次设备号不同,且sdade的次设备号是0
brw-rw----. 1 root disk      8,   1 May 23 16:37 sda1
brw-rw----. 1 root disk      8,   2 May 23 16:37 sda2
brw-rw----. 1 root disk      8,   3 May 23 16:37 sda3

  ⑤、硬盘接口类型
    接口速率而非硬件设备速率,同一个接口不同的硬盘速率不同

   并行(实现数据串行工作,类似双向两车道,但是之间有数据干扰)

     IDE:133MB/s

     SCSI:640MB/s

   串口(实现数据串行工作,类型单向四车道)

       SATA3:6Gbps(需要除以8来得到实际速率)

     SAS:6Gbps

     USB:480MB/s

    单位(rpm): rotations per minute

  ⑥、磁盘设备的设备文件命名

    命名格式: /dev/DEV_FILE

    不同的主设备命名方法: /dev/sd#
      【注意:#代表a-z】
      如: 

       · IDE::/dev/hd
       · SCSI, SATA, SAS, USB:/dev/sd
    

    同一主设备不同的分区命名:
      【直接使用数字区分】
       如:/dev/sda /dev/sda2 /dev/sda2 /dev/sda3

2、机械式硬盘【这一部分写出来主要是了解作用:要了解什么是磁道、扇区、柱面】

  机械硬盘主要由以下几部分组成:机械手臂(Boom),磁头(Head),转轴(Spindle),盘片(Platter)组成,在实际应用中又将盘片分成了磁道(Track),扇区(Sector)和柱面(Cylinder)

  

                     

在实际应用中又将盘片分成了磁道(Track),扇区(Sector)和柱面(Cylinder)

       

                       

3、分区原理知识点
  前言:机械式硬盘是按柱面分区的
  
  ①、0磁道0扇区
    在传统的系统上,当我们启动计算机的时候,默认的最开始会读取0磁道0扇区的数据,其大小是512bytes
    它不属于任何分区,用来标识我们创建的分区信息等
    0磁道0扇区的大小不会算在分区里面
446bytes: boot loader 主引导记录
64bytes: 分区表
16bytes: 标识一个分区      【所以一个机械硬盘最多只能够分4个主分区,或者3个主分区+扩展分区(N个逻辑分区)】
2bytes: 55AA用来标识结尾

实战演练:(要知道 "dd"命令是干什么的)

# 备份MBR
dd if=/dev/sda1 of=/root/mbr bs=512 count=1

# 恢复MBR:
dd if=/root/mbr of=/dev/sda1 bs=512 count=1

# 恢复分区表:
dd if=/root/mbr of=/dev/sda1 bs=512 skip=446 count=66
  注:mbr大小512 所以bs=512 count=1 bs=512 skip=446 count=66 用来确定分区表在备份文件中的位置

4、磁盘分区管理工具:【fdisk 、parted 、sfdisk

  本篇文章主要是讲解fdisk进行磁盘分区操作

  fdisk 管理分区的前提条件:最多只能够管理15个分区

  语法格式2: fdisk [-l, -u] [device]

    参数说明:如果不带参数的话,直接进行分区

           -l:显示当前系统分区情况;后面如果带了具体的那个分区的话,就显示那个分区结构

           -u:对磁盘进行分区操作

 

在使用fdisk命令的时候注意:
# fdisk -u /dev/sda    【正确】 # fdisk -u /dev/sda1    【错误】

 在分区操作上:以下是子命令管理操作

      p: print, 显示已有分区;

           n: new, 创建         【在分区的时候注意:因为必须保留1-4这4个数字给主分区和扩展分区使用,所以逻辑分区的数字必须从5开始】
           d: delete, 删除
           w: write, 写入磁盘并退出
           q: quit, 放弃更新并退出
           m: 获取帮助
            l: 列表所分区id
            t: 调整分区id

分区保存退出之后还要进行以下几步操作才行

   ①、查看内核是否已经识别分区命令:

    # cat /proc/partaions 

   ②、如果内核没有识别,则通知内核重新读取磁盘分区表   

    方法一:
      # partx [-a,-n] /dev/DEVICE
       -a:读取全部全部分区表
       -n:读取指定的分区表

    方法二:
      #kpartx [-a,-f] /dev/DEVICE
       -a:读取全部全部分区表
       -f:强制读取分区表 【注意:这种方法不建议使用,如果上面的读取方法不行的话,最后才使用这种方法】

    方法三: 【注意:这个方法只适用于centos5.x系列】
      # partprobe [/dev/DEVICE]

   ③、做了上面几步之后,如果想使用当前分区的磁盘的话,还需要格式化磁盘

      

案例分析:

[root@oldboy ~]# fdisk -l    【查看当前系统里面的所有分区情况】
  
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006ac8d

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26         113      694272   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             113        1306     9585664   83  Linux
[root@oldboy ~]# fdisk -u /dev/sda      【在磁盘sda上面创建新的分区】 WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c'). Command (m for help): n Command action e extended p primary partition (1-4) e          【扩展分区】 Selected partition 4 First sector (63-20971519, default 63): Using default value 63 Last sector, +sectors or +size{K,M,G} (63-2047, default 2047): 1000 Command (m for help): p    【查看分区信息】 Disk /dev/sda: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0006ac8d Device Boot Start End Blocks Id System /dev/sda1 * 2048 411647 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 411648 1800191 694272 82 Linux swap / Solaris Partition 2 does not end on cylinder boundary. /dev/sda3 1800192 20971519 9585664 83 Linux /dev/sda4 63 1000 469 5 Extended Partition 4 does not end on cylinder boundary. Partition table entries are not in disk order Command (m for help): w    【保存分区信息并退出】 The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. [root@oldboy ~]# cat /proc/partitions   【查看内核是否已经识别了分区,这里内核没有识别分区】 major minor #blocks name 8 0 10485760 sda 8 1 204800 sda1 8 2 694272 sda2 8 3 9585664 sda3 [root@oldboy ~]# partx -a /dev/sda    【通知内核重新读取磁盘分区信息】 BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 BLKPG: Device or resource busy error adding partition 3 [root@oldboy ~]# cat /proc/partitions   【再次查看,内核已经识别了分区】 major minor #blocks name 8 0 10485760 sda 8 1 204800 sda1 8 2 694272 sda2 8 3 9585664 sda3 8 4 469 sda4

 5、文件系统管理操作

  1)文件系统类型介绍:

  linux文件系统类型:ext2、ext3、ext4、xfs 【btfrs、reiserfs、jfs、swap(交换分区)、光盘(iso9660)】
  swap: 交换分区

  windows: fat32 、utfs
  unix: FFS、UFS、JFS2
  网络文件系统:NFS、CIFS
  集群文件系统:GFS2、OCFS2
  分布式文件系统:ceph

  根据其是否支持"journal"功能,又分为
   日志文件系统:ext3,ext4,xfs,...
   非日子文件系统:ext2,vfat

  文件系统的组成部分:

         内核中的模块:ext4, xfs, vfat
         用户空间的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat  【其实是一一对应的】

   Linux的虚拟文件系统:VFS------linux系统上可同时使用多种文件系统类型,最终都统一成VFS来进行管理,

             使用cat /proc/filesystems命令来查看系统支持的文件系统类型,

             lsmod命令能查看已装载的模块

 2)创建文件系统(格式化):

   mkfs命令:  

  语法1: mkfs.FS_TYPE  /dev/DEVICE

  语法2:mkfs -t  FS_TYPE  /dev/DEVICE   [上面一个可以说成是下面这个的简写]

       FS_TYPE 选项: 

        ext4、xfs、btrfs、vfat

       共同参数:

         -L # : 设定卷标名为#

 案例详解:

[root@oldboy ~]# mkfs.ext4 -L "myname" /dev/sda4  【创建文件系统的同时指定卷标】
mke2fs 1.41.12 (17-May-2010)
Filesystem label=myname
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
64 inodes, 468 blocks
23 blocks (4.91%) reserved for the super user
First data block=1
Maximum filesystem blocks=524288
1 block group
8192 blocks per group, 8192 fragments per group
64 inodes per group

Writing inode tables: done                            

Filesystem too small for a journal
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@oldboy ~]# blkid /dev/sda4    【查看文件系统类型】
/dev/sda4: LABEL="myname" UUID="0f2e4652-15aa-4589-8c3f-225f73b0c74d" TYPE="ext4" 
[root@oldboy ~]# 
View Code

 3)文件系统专用管理工具:

  mke2fs命令 【是ext系列文件系统专用管理工具】

     语法:mke2fs [OPTIONS] /dev/DEVICE

         参数:

        -t: (ext2\ext3\ext4)
        -b:指定block大小,不指定的话默认(1024.2048.4096)
        -L: 指定卷标
        -j: 相当于 -t ext3

        -i # : 为数据空间中没多少个字节创建一个inode;ci大小不应该小雨block大小
        -n # : 为数据空间创建多少个inode
        -m # : 为管理人员预留的空间占据百分比;默认百分之5的空间
        -O FEATURE[,...] : 启用指定特性
        -O ^FEATURE[,...]: 关闭指定特性

     举例:mke2fs -b 2048 -m 3 -L MYDATA /dev/sda4

4)创建交换分区

  命令:mkswap 

    使用命令的前提:必须先调整其分区的ID为82 (使用fdisk 里面的 "t" 选项实现)

    命令格式: mkswap [OPTIONS] ... DEVICE

      参数: -L : "LABLE"

 5)其他常用工具

   blkid命令 :快设备属性信息查看

    语法: blkid [OPTIONS]... [/dev/DEVICE]

      参数: 
       -L:根据指定的LABLE来查找对于的设备
       -U:根据指定设备的UUID来查找对于的设备
    
    【注意:如果前面跟了参数的话,是根据指定参数来查找设备文件,后面路径不要写(写了也没有用);
      如果前面不给参数的话,是查看设备文件的UUID和LABEL等,后面就必须写上是哪个设备文件】  
[root@oldboy ~]# blkid /dev/sda4     【查看设备文件属性信息】
/dev/sda4: LABEL="lable" UUID="d33ffdae-f171-492e-b3d5-6099dcbe5856" TYPE="ext4" 
[root@oldboy ~]# blkid -L lable  【根据设备文件的LABLE,找到该设备文件】     
/dev/sda4
[root@oldboy ~]#blkid -U "d33ffdae-f171-492e-b3d5-6099dcbe5856"   【根据设备文件的UUID,找到该设备文件】
Blkid 命令的用法

  e2lable命令:管理ext系列文件系统的LABLE

    语法: e2lable [LABLE]  DEVICE

   tune2fs命令:重新设定ext系列文件系统可调整参数的值  

    参数:
     -l:查看文件系统的超级块信息:super block
     -L 'LABLE' : 修改卷标
     -j: 将 ext2 升级为ext3 (相当于 "-t ext3")
     -m # : 为管理人员预留的空间占据百分比;默认百分之5的空间
     -O FEATURE[,...] : 启用指定特性
     -O ^FEATURE[,...] 关闭指定特性
      tune2fs -O has_journal /dev/sda5, 会把原先的ext2文件系统改为ext3,
      tune2fs -O ^has_journal /dev/sda5 禁用此属性
     -o:调整文件系统的默认挂载选项,用法和上面一样,关于属性名可以man tune2fs来查看,
      例如tune2fs -o ^acl /dev/sda5 #禁用默认挂载选项的acl功能
     -U UUID : 修改UUID号;UUID但是随机 生成的,要修改的场景不多

    

    dumpe2fs命令    

    -h:  查看超级快信息

    举例:  dumpe2fs  /dev/sda4 会详细的显示文件系统信息,或者说是布局信息,比如分组情况,块信息,inode位置等

  

6)文件系统的检测工具(常用于异常关机导致文件系统出错的情况):

    注意事项:无论是异常关机还是正常关机,开机时不要进行文件自动检测,最好是开机后进行文件手动检测

    

    

猜你喜欢

转载自www.cnblogs.com/l75790/p/9131525.html