zoukankan      html  css  js  c++  java
  • 【磁盘/文件系统】第一篇:磁盘管理和文件系统管理

    一、 磁盘基础知识
    本章学习之前需要了解以下几点:
      •强调: 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 # : 设定卷标名为#

     案例详解:

    View Code

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

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

         语法:mke2fs [OPTIONS] /dev/DEVICE

             参数:

            -t: (ext2ext3ext4)
            -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等,后面就必须写上是哪个设备文件】  
    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)文件系统的检测工具(常用于异常关机导致文件系统出错的情况):

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

        

        

  • 相关阅读:
    uva 10474 Where is the Marble?(简单题)
    【cocos2d-x 3.7 飞机大战】 决战南海I (二) 我方飞机的实现
    STM32中assert_param的使用
    OC语言--内存管理
    php通过shell调用Hadoop的方法
    前端JSON使用总结
    Google地图接口API之Google地图 API 参考手册(七)
    Google地图接口API之地图类型(六)
    Google地图接口API之地图控件集(五)
    Google地图接口API之地图事件(四)
  • 原文地址:https://www.cnblogs.com/l75790/p/9208225.html
Copyright © 2011-2022 走看看