首页 > 代码库 > 磁盘分区及创建文件系统

磁盘分区及创建文件系统

磁盘分区及创建文件系统


机械式硬盘

  1.平均寻道时间:ns

  2.磁盘转速:rpm 5400 7200 10000rpm 15000rpm


  track:磁道

  sector:扇区,512Bytes,现在我们所说的扇区实际上是平均值

  cylinder:柱面,从磁道向所有盘面做投影

    partition:分区,基于柱面来划分的存储空间

  head:磁头,每个磁盘表面都有一个磁头


  设备文件:/dev

    设备文件是关联到硬件设备的驱动程序和设备的访问入口


  设备号:

    major:主设备号,区分设备的类型,用于标明设备所需的驱动程序

    mijor:次设备号,区分两种类型下的不同设备,是特定设备的访问入口


  mknod命令:

    mknod - make block or character special files 制造一个块或者字符类型的文件

    mknod [OPTION]... NAME TYPE [MAJOR MINOR]


  设备类型:

    块设备:b(block) 用于随机访问的设备,数据存储和交换的单位是块。

    字符设备:c(character) 用于线性访问的设备,数据的交换单位一般是字符。


  设备文件名:IANA--->ICANN

    所有设备放在/dev/下面

    IDE:hd[a-d]

    SCSI/SATA/SAS/USB:sh[a-z]  sdab


    RHEL,Centos6开始:所有的接口类型的硬盘设备统一命名为sd[a-z]


  设备的引用方式:

    设备的文件名

    卷标(Volume Lable)


    UUID:全局唯一标识符,128bit


  如何使用一个新的硬盘设备?

    分区

    创建文件系统(格式化)

    挂载分区


  为何分区?

    1.优化I/O性能

    2.实现磁盘空间的配额限制

    3.可以进行高速修复

    4.隔离系统文件和其他程序文件

    5.安装多个操作系统


  如何分区?

    MBR分区:硬盘空间小于2TB

      MBR:Master(Main) Boot Record,主引导记录,起源于1982年。

      0磁道0扇区:整个磁盘的最开始的位置 512Byte

        446Byte:boot loader,引导加载程序,默认是GRUB

        64Byte:Partition table,分区表,每16Bytes表明一个分区的内容:因此一个有四个主分区

        注意:

          1.主分区加扩展分区最多可以有四个,其分区表位的编号依次为1.2.3.4

          2.逻辑分区的编号从5开始,不管前面的四个数字编号是否被占用

        2Bytes:结束标记,55AA

   

    GBT分区:硬盘空间大于2TB

      GUID Partition Table, GUID分区表,支持128个分区

      UEFI(统一扩展固件接口)的硬盘可以支持GPT


    通常使用的分区工具:

      fdisk:用于管理和创建MBR分区,对于一块硬盘来说只能管理十五个分区

      gdisk:GNU disk 用于创建和管理GPT分区


    如果使用fdisk或者gdisk命令对于已有分区并挂载使用的磁盘的剩余空间进行再次分区的信息,即便是保存了,也不会被内核重新读取,如果要让内核识别此类分区:

      1.重启计算机

      2.partprobe命令或者partx命令强制内核重读分区表,

        在centos5/7 partprobe [device] 如果省略了设备名,则表示重读所有磁盘的分区表

        在centos6/7 partx -a [device] 

                    kpartx -af [device] 

        查看分区后内核有没有识别的目录: cat /proc/partitions

        强制内核读取分区后的信息:partprobe /dev/*




    fdisk分区实例:

      fdisk -l [-u] [device...]  查看指定磁盘的分区表,如果省略device参数,则显示所有磁盘设备的分区表


      fdisk device

        fdisk子命令

          d 删除分区

          l 显示此磁盘的详细信息

          m 帮助菜单

          n 添加分区

            n的子命令

              e 扩展分区

              p 主分区

              l 逻辑的

          p 在交互模式中显示分区表

          q 不保存,退出编辑

          t 修改Partition系统标识

          w 保存并且退出



      parted:GNU 高级分区工具,实时生效

          parted - a partition manipulation program

          parted [options] [device [command [options...]...]]

       parted /dev/sdb mklabel gpt|msdos

       parted /dev/sdb print

       parted /dev/sdb mkpart primary 1 200

       parted /dev/sdb rm 1


~]# echo ‘- - -‘ > /sys/class/scsi_host/host2/scan

强制内核识别在开机状态下插上的SCSI接口的磁盘


写一个脚本,将一个命令所依赖的共享库文件复制到/mnt/sysroot/lib64目录中,如果库文件已经存在于目标目录中,就不复制。

#!/bin/bash

#

DEST=/mnt/sysroot/lib64 

if [ ! -d $DEST ] ; then

mkdir -p $DEST

fi


until [ "$CMD" == ‘quit‘ ] ; do

read -p "give me a command: " CMD

if which --skip-alias $CMD &> /dev/null ; then

for I in $(ldd $(which --skip-alias $CMD) | grep -o "/[^[:space:]]\+") ; do

SRCLIB=$(basename $I)

if [ ! -e ${DEST}${SRCLIB} ] ; then

cp $I $DEST

fi

done

else

echo "Command not invalid."

fi

done




4.30


创建文件系统:

  FHS 文件系统层级标准

  权限

  文件的命名规则


为什么创建文件系统?

  平面分类管理

  空间分类管理


  创建文件系统实际上就是给分区进行存储空间的逻辑编址。


格式化:

  低级格式化

    物理层面完成格式化,在磁盘设备出厂时,通过低级格式化来创建磁道,主要作用就是创建磁道

  高级格式化

    分区之后进行的,主要作用是用来创建文件系统,为分区构建逻辑编址单元

    无论是簇还是块都是将一个或者多个扇区组织在一起,共同完成数据存储

    簇: 512B 1024 2048 4096 8192 16384 32768 655536

    块:1024 2048 4096 

    注意:

      1.一个块只能放置一个文件的内容,一个文件可以占用多个块

      2.如果在某个分区中,将创建大量的小文件,把块划分的小一些,反之,块就大一些

      3.如果分区空间比较大,块也应该大一些


  在一个分区中创建了文件系统:

    首先,会将分区划分成大小相等的若干块

      元数据块

        元数据---inode(index node)

        文件的属性:

        文件的大小

        文件的权限

        文件的所有者

        文件的时间戳

        数据块指针

      

        存放元数据的固定的存储空间称为:inode

        每个inode都有其对应的inode编号

      数据块

        存放文件中所包含的流式数据


    特殊文件:

      设备文件:block special或者character special

        仅仅是将元数据中的数据块指针换成了设备号

      符号链接文件:symbolic link

        仅仅是将元数据中的数据块指针换成了另一个文件的访问路径

      这类文件只占据元数据区域,没有数据块占用。


    随着磁盘空间越来越大,我们划分块的数量也越来越多,我们管理起来也越来越不方便,划分块组可以解决该问题。

     

      块组:每个块组有独立的元数据块和数据块

      存放数组的时候,以块组内的数据块优先选择,如果块数组内的数据块不够,可以通过存储策略来请多个块组协调存储


      超级块:主要定义了有多少个块组,以及每个块组的边界。


      为了防止超级块发生故障导致整个文件系统崩溃,要对超级块进行冗余备份。


      日志区域:对于数据的写入操作做记录的块,防止数据不一致

        数据不一致通常都是由于不洁关机,不洁断电导致的。


      一个完整的文件系统:

        超级块, inode, inode bitmap, block bitmap, data block, journal block。


想要查找/var/log/messages文件的内容,是怎样的过程?


首先查找/目录inode编号,从元数据区域中找到对应inode,再读取inode中的数据块指针,找到存放/目录内容的数据块;

然后,在数据块中查找名称为var的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到保存var目录内容的数据块;

再然后,在该数据块中查找名称为log的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到保存log目录内容的数据块;

之后,在该数据块中查找名称为messages的文件名,如果有,就定位其inode编号,再到元数据区域总查找对应编号的inode,再根据数据块指针找到messages文件对银的数据块,就可以读取数据;

      


系统调用


    Linux支持的文件系统

      位于内核空间的文件系统驱动

        1.内核的一部分

        2.内核的模块

      位于用户空间的文件系统管理应用程序


    Linux自己的文件系统:

      ext ext2 ext3 ext4(支持最大分区50TB,可以做根分区,可以做启动分区)

      xfs(目前为止企业级的64位文件系统,最大分区可以支持500TB,也可以做根和启动分区)

      reiserfs(良好的反删除功能)

      btrfs 平衡树文件系统(技术预览版)


    光盘文件系统:iso9660

    网络文件系统:NFS  CIFS

    集群文件系统:gfs2  ocfs2

    内核级的分布式文件系统:ceph

    伪文件系统:proc  sysfs  tmpfs  hugepagefs


    Windows的文件系统:vfat  vtfs


    Unix文件系统:ufs  ffs  jfs  zfs


    交换分区文件系统:swap


    用户空间中的分布式文件系统:mogilefs  moosefs  glusterfs


    对于不同的发行版的Linux:都有其默认的文件系统选择:

      RHEL  centos

      5   ext3

      6   ext4

      7   xfs



写一个脚本,如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中;

#!/bin/bash

#

if who | grep -q "\<hacker\>" ; then

  for I in $(who | grep "\<hacker\>" | cut -d ‘ ‘ -f3-5 --output-delimiter=‘ ‘); do

    echo -n $I >> /var/log/login.log

  done

fi



管理文件系统:

  创建文件系统:

    mkfs

     mkfs.ext3   mkfs.xfs    mkfs.btrfs   mkfs.ext2    mkfs.ext4  

文件系统监测和修复系统:

   fsck

     fsck.ext3  fsxk.ext3  fsck.ext4  

文件系统属性查看工具:

  dumpe2fs

文件系统的属性调整工具:

  tune2fs


创建文件系统工具:

  mkfs命令:

     mkfs - build a Linux filesystem

     mkfs [options] [-t type] [fs-options] device [size]


     mkfs -t ext2 /dev/sdb1


     注意:

       1.不要使用磁盘设备名称和扩展分区设备作为mkfs命令的参数,如果使用磁盘设备作为mkfs的参数,所有的分区都被删除。如果使用扩展分区作为mkfs的参数,所有的逻辑分区都将被删除

       2.能够作为mkfs命令参数的设备,是主分区设备和逻辑分区设备


     如果只是计划创建ext系列文件系统的话,可以使用mke2fs命令:

       mke2fs:

         mke2fs - create an ext2/ext3/ext4 filesystem

         常用选项:

          -b block-size  在创建文件系统时,调整块的大小

          -i bytes-per-inode  指明inode与字节的比率,即:多少个字节可以建一个inode,默认为16384

          -j  创建有日志功能的文件系统,就是ext3

          -N number-of-inodes  直接指明要给此文件系统创建的inode的数量

          -m reserved-blocks-percentage  指定为超级用户root保留的磁盘空间的百分比,默认值是5

          -t fs-type  指定文件系统类型 ext2 ext3 ext4 默认是ext2

          -O [^] feature[,...]   关闭或者开启文件系统的特性

          -L volume-label   为文件系统指定卷标

          -F  强制创建文件系统

          -E  用户指定的额外文件系统属性


     如果只是想要修改ext文件系统的卷标,可以使用e2label命令

       e2label - Change the label on an ext2/ext3/ext4 filesystem

       e2label device [ new-label ]

     注意:如果不加卷标信息,表示查看指定设备的卷标

           如果添加了卷标信息,表示修改指定设备的卷标


     如果想要修改ext系列的文件系统的属性,可以使用tune2fs命令

       tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems

       调整那些在ext2.3.4文件系统上的可修改的参数:

       常用的选项:

          -j  将ext2文件系统修改为ext3

          -m reserved-blocks-percentage  修改为超级用户root保留的磁盘空间的百分比

          -o  [^]mount-options[,...]  修改文件系统的默认挂载选项

          -r reserved-blocks-count  修改为超级用户预留的磁盘空间块的数量

          -L volume-name  修改文件系统的卷标

          -O [^]feature[,...]  修改文件系统的特性,将其关闭或者启用

          -l  显示超级块的信息,相当于dumpe2fs -h


文件系统的检测修复工具: 

  fsck

    -t fstype 指定要检测的文件系统类型

    -a 无需交互自动修复所有问题

    -r 交互式修复问题,


  ext系列文件系统专门的文件检测修复工具:

    e2fsck

      -y 在交互过程中的说有问题,都以yes来回答

      -f 强制检测修复,即使文件系统处于clean状态,


  blkid

    查找和显示属性的工具

      blkid -L label  根据卷标进行查找

      blkid -U uuid  根据UUID进行查找

  

  findfs  

    find a filesystem by label or UUID  查找一个文件通过卷标或者UUID

       findfs LABEL=label

       findfs UUID=uuid


  创建swap文件系统:

    前提:分区类型必须是swap类型

       修改的方法:在fdisk交互模式中,使用t命令将指定分区的类型修改为82即可

    mkswap

      set up a Linux swap area

      -L, --label  设置交互分区的卷标

      -f  强制执行


使用文件系统:挂载

   根文件系统之外的其他文件系统想要被访问,都必须通过某种方式关联到根文件系统上,具体做法就是把其他文件系统装载到根文件系统中的某个目录之中,这个过程称为“挂载”用于关联其他文件系统的那个目录,称为挂载点。


   挂载点:mount point 也就是其他文件系统的访问入口 例如: /boot

     要求:

       1.作为挂载点的目录必须事先存在

       2.作为挂载点的目录应该是没有被使用或者不能被其他进程使用的目录

       3.作为挂载点的目录一旦挂载文件系统,其内原有的文件将被隐藏

    

     完成挂载操作使用mount命令:

       mount - mount a filesystem

       mount [-fnrsvw] [-t vfstype] [-o options] device dir

       常用选项:

         -r, --read-only 以只读的方式挂载目录文件系统,

         -w, --read-write  以读写的方式挂载目标文件系统

         -n,默认情况下,设备挂载或者卸载的情况下会同步更新到/etc/mtab中,如果在挂载时使用了-n选项,则表示我们要禁用此特性,即不挂载成功,也不会更新到/etc/ntab中

         -t  -vfstype 指明要挂载的设备上创建的文件系统类型,如果省略该选项,mount命令会通过blkid来判断要挂载的目标设备的文件系统类型

         -L  -LABEL 挂载文件系统时,使用卷标代替设备名称

         -U  UUID  挂载文件系统时,使用UUID代替设备名称

         -a  mount -a   按照/etc/fstab文件中填写的设备进行自动挂载

         -o  option:

            sync/nosync:同步/异步 操作

            atime/noatime:文件或者目录被读取访问时是否更新访问时间戳

            diratime/nodiraname:目录被读取访问时是否更新访问时间戳

            ro/rw:是否只读/读写的方式挂载文件系统

            dev/nodev:在此文件系统中是否允许创建设备文件

            exec/noexec:在此文件系统中是否允许运行程序文件

            auto/noauto:是否允许使用mount -a方式的挂载/etc/fstab中的文件系统

            user/nouser:是否允许普通用户挂载此文件系统

            suid/nosuid:是否允许程序文件上的SUID和SGID特殊权限生效

            relatime/norelatime:是否参考inode访问的时间来修改其修改时间和改变时间

            remount:不经卸载实现直接挂载,可以应用到新的挂载选项

            acl:可以使文件系统支持facl功能

            defaults:默认选项,包括rw,suid,dev,exec,auto,nouser,async,relatime

            loop: 使用环回设备:将镜像文件挂载到挂载点

            -B --bind 将某个绑定到另一个目录

        

        卸载文件系统:

          umount mount_point|device


        挂载光盘:

          1.保证光盘镜像文件放入虚拟机光驱

          2.保证光驱处于“已连接”状态

          3.创建光驱挂载点 mount -r /dev/sr0 mount_point


        挂载优盘:

          需要事先让系统识别优盘设备,然后根据设备进行挂载,/etc/sdc1


        挂载交互分区:

          swapon swapoff  挂载和卸载

          -a: 自动挂载存储于/etc/fstab文件中的交互分区设备


        df

          -h

          -t

          -p


        free

          -k

          -n

          -g


        /etc/fstab文件的格式:

          共六个字段,使用空白字符分隔,

            1.要挂载的设备

              设备文件名

              LABEL

              UUID

              伪文件系统

            2.挂载点

              swap设备无需挂载点,指定swap即可

            3.文件系统类型

            4.挂载选项:defaults

            5.转储频率

              使用dump命令备份分区的频率

              0 表示不备份

              1 每天备份一次

              2 每隔一天备份一次

            6.自动次序

              0 不自检

              1 优先自检 通常只设置在根文件系统上

              2 次级自检

              ...

              9 最低优先级自检







  


本文出自 “12657170” 博客,请务必保留此出处http://12667170.blog.51cto.com/12657170/1922741

磁盘分区及创建文件系统