linux的磁盘管理

  1. 磁盘的结构:

    磁盘的外部结构包括电源结构、数据接口、控制电路板、固定面板。如下图所示:

    linux的磁盘管理

    磁盘的内部结构包括磁头组件、磁头驱动机构、磁盘片、主轴组件、前端控制电路

            linux的磁盘管理

    磁盘控制电路中包括:主控制芯片、数据传输芯片、高速数据缓存芯片;

    磁盘的磁头:采用了非接触式结构,加电后悬浮在高速旋转的磁盘表面;

    磁盘的磁道:当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这个圆形轨迹就叫磁道。

    磁盘的柱面:磁盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。

    磁盘的扇区:磁盘上的每个磁道被等分为若干个弧段,这些弧段就被称为磁盘的扇区。

    磁盘容量的计算header(磁头量)*cylinder/header(每个header负责的柱面)*sector/cylinder(每个柱面上包含的扇区数)*512bytes/sector(每个扇区上容纳的字节数)。因此磁盘的计算方式为:Header*Cylinder*Sector*512Bytes

    磁盘工作原理:磁盘利用特定的磁粒子的极性记录数据,读取数据时将不同极性转换成不同的电脉冲信号,再利用数据转换器将原始信号变成电脑可以使用的数据。写数据时正好相反。

    磁盘的主要参数:容量、转速、平均寻道时间、数据传输率

  2. 磁盘中的第一扇区

    磁盘中的第一扇区非常重要,主要记录了两种重要信息:

    第一种是:主引导分区(Master Boot Record ,MBR)可以安装引导加载程序的地方,446Bytes。

    第二种是:分区表,记录整块分区磁盘的状态。 64bytes。还剩下2bytes,装的是magic number。

  3. 磁盘分区表

    在分区表所在的64bytes容量中,总共分为4组记录区,魅族记录区记录了该区段的起始与结束的柱面号码,这四个分区被称为主分区或者扩展分区。

    既然第一个扇区所在分区表只能记录四条数据,那么我们可以利用额外的扇区来记录更多的分区信息。

     扩展分区的目的是使用额外的扇区记录分区信息,扩展分区本身并不拿来格式化。

  4. 开机流程与主引导分区

        BIOS:开机主动执行的韧体,会认识第一个可开机的设备。

        MBR:第一个可开机设备的第一个扇区内的主引导分区块,内包含引导加载程序。

        引导加载程序(Boot loader):一支可读取内核文件来执行的软件。

        内核文件:开始操作系统的功能。

    开机流程:首先是硬件上电自检,待检测完毕之后,系统会自动载入BIOS。接下来BIOS会分析目前系统中包括哪几种存储介质。以硬盘为例,BIOS会依据用户的设置取得能够开机的硬盘,并且到硬盘里面去读取第一个扇区的MBR位置。MBR这个仅有446bytes的硬盘里面会放置最基本的引导加载程序,主要是将内核文件加载进来。

    其中boot loader是在MBR之上的一层软件,主要功能包括:1.提供菜单,2.载入内核文件,3.转交其他loader。

   5.linux的文件系统

    linux系统中的文件数据除了文件实际内容外,通常含有非常多的属性。文件系统通常会将这两部分的数据分别存放到不同的块,权限与属性放置到inode中,至于实际数据则放置到data block中。另外还有一个超级块会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量。

    super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息。

    inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。

    block:实际记录文件的内容,若文件太大时,会占用多个block。

    对于data block中的限制为:

    1.原则上,block的大小与数量在格式化完就不能够在改变了(除非重新格式化)

    2.每个block内最多只能够放置一个文件的数据

    3.乘上,如果文件大于block的大小,则一个文件会占用多个block数量。

    4.乘上,如果文件小于block,则该block的剩余空间就不能够再使用了。

    对于inodetable(inode 表格)

    1.该文件的访问权限(rwx)

    2.该文件的所有者与组(owner/group)

    3.该文件的大小

    4.该文件创建或状态改变的时间(ctime)

    5.最近一次的读取时间(atime)

    6.最近修改的时间(mtime)

    7.定义文件特性的标识(flag)

    8,该文件真正内容的指向

    除此之外inode的特色:

    1.每个inode大小均固定为128bytes。

    2. 每个文件都仅会占用一个inode。

    3.因此能够创建的inode的数量与文件中block的数量是相对应的。

    4.系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block的内容。

    下面来聊一下文件创建、删除、复制、剪切等操作,在linux所属的文件系统中,这些操作是如何完成的。

文件的查找过程 ——举例来讲:/var/logs/messages

     文件系统会找到存放根目录的inode号,通过该inode号找到data block中的根目录,在根目录下存放着它目录下面的一系列的文件名,找到了一个叫var的目录名,同时也找到了该目录的inode号(暂时叫i_var),此时从inode表中去查找i_var中对应的data block的block块;然后查询该块的内容,查到一个文件叫logs的目录,同时也找到了该目录的inode号(暂时称为i_log),再次从inode表中去查询i_log对应的data block块,找到对应的该块,查询里面的内容,发现了一个叫messages的文件,同时也找到了该文件的inode号,然后根据此inode号找到对应data block块。至此找到了该文件。

文件的创建过程:

    过程如同上述,当找到logs目录时,此时它会查找inode bitmap,查找空闲的inode。

    6.linux的挂载点与文件系统的简单操作

    将文件系统与目录树结合的操作称为挂载。挂载点一定是目录,该目录是进入该文件系统的入口。因此并不是你有任何文件系统都能使用,必须要挂载到目录树的某个目录后,才能使用该文件系统。

    df:列出文件系统的整体磁盘用量     -h,以人们容易阅读的方式进行显示  -i 显示inode节点数

    du:评估文件系统的磁盘使用量   -h:同上, -s,列出目录总量   -a:列出文件

    dumpe2fs 显示每个区段以及data block的信息  -h 设备文件名 

    7.链接文件

    硬链接:hard link只是在某个目录下新建一条文件名连接到某个inode号码的关联记录而已。

        1.只能对文件创建,不能应用于目录。

        2.不能跨文件系统

        3.创建硬链接会增加文件被链接的次数。

    软链接:symbolic link就是在创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。

        1.可应用与目录。

        2.可以跨文件系统。

        3.不会增加被链接文件的链接次数。

        4.其大小为指定的路径所包含的字符个数。

       命令:  ln -sv src dest

    8.设备文件:与系统外设及存储等相关的一些文件,通常都集中在/dev目录下。

    b:按块为单位,随机访问的设备;  硬盘;随机地在硬盘的不同块读写

    c:按字符为单位,线性设备;  键盘 ;一次性读取,不能截断。

    /dev目录下代表的不是

    主设备号(major number) 标识设备类型

    次设备号(minor number)标识同一类型中不同设备
    mknod [OPTION]... NAME TYPE [MAJOR MINOR]                -m MODE

    9.硬件设备的设备文件名

    IDE,ATA:hd

    SATA: sd    SCSI: sd      USB:sd

    a,b,c...来区别同一种类型下的不同设备。

    hda:  hda1:第一个主分区    had2,had3,had4,hda5:第一个逻辑分区

    查看当前系统中识别了几块硬盘

    fdisk -l [/dev/to/some_device_file]

    10.文件系统和VFS

    常见的文件系统包括:

    传统文件系统:ext2,iso9660..

    日志文件系统:ext3/ntfs...

    网络文件系统:nfs..

    linux管理文件系统是通过VFS进行管理。

    11.磁盘的分区、格式化、检验与挂载

    新增一块磁盘时,需要进行的操作包括:

    1.对磁盘进行分区,以新建可用的分区。

    2.对该分区进行格式化,以创建系统可用的文件系统。

    3.若想要仔细一点,则可对刚才新建好的文件系统进行检查。

    4.在linux系统上,需要创建挂载点(也就是目录),并将它挂载上来。

    12.常用命令

    1.磁盘分区

    fdisk 【-l】 设备名称   : 查阅系统内的所有分区有哪些

    partprobe:强制让内核重新找一次分区表      cat /proc/partitions

    因为磁盘无法卸载,所以内核无法重新取得分区表信息,因此此时系统会要求我们重新启动(reboot)以更新内核的分区表信息才行。

    2.磁盘管理

    文件系统管理

    mkfs : make file system

            -t FSTYPE

    mkfs -t ext2 = mkfs.ext2

    mkfs -t ext3 = mkfs.ext3

    专门管理ext系列文件:

    mke2fs

            -j:创建ext3类型文件系统

            -b BLOCK_SIZE:指定块大小,默认为4096;可以取值为1024,2048,4096;

            -L LABEL   执行卷标;

            -m #:指定给预留给超级用户的块数百分比

            -i # :用于指定为多少字节的空间创建一个inode,默认为8192;这里给出的数值应该为块大小的2^n倍;

            -N:指定inode数

            -F:强制创建文件系统

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

    blkid:查询或查看磁盘设备的相关属性

            UUID TYPE  LABEL

    e2label:用于查看或定义卷标

            e2label 设备文件 卷标:设定卷标

    tune2fs:调整文件系统的相关属性
         -j: 不损害原有数据,将ext2升级为ext3;
         -L LABEL: 设定或修改卷标;
         -m #: 调整预留百分比;
         -r #: 指定预留块数;
         -o: 设定默认挂载选项;
          acl
         -c #:指定挂载次数达到#次之后进行自检,0或-1表关闭此功能;
         -i #: 每挂载使用多少天后进行自检;0或-1表示关闭此功能;
         -l: 显示超级块中的信息; 

        dumpe2fs: 显示文件属性信息
             -h: 只显示超级块中的信息
 
        fsck: 检查并修复Linux文件系统
             -t FSTYPE: 指定文件系统类型
             -a: 自动修复
 
        e2fsck: 专用于修复ext2/ext3文件系统
             -f: 强制检查;
             -p: 自动修复;

        挂载:将新的文件系统关联至当前根文件系统      

        卸载:将某文件系统与当前根文件系统的关联关系予以移除              

        mount 设备  挂载点

        设备: 设备文件:/dev/sda5 卷标:LABEL=“” UUID :UUID=""

        挂载点:目录

         要求:1.此目录没有被其他进程使用

                    2.目录得事先存在

                    3.目录中的原有的文件将会暂时隐藏

    mount:显示当前系统已经挂载的设备及挂载点

     mount [options] [-o options] DEVICE MOUNT_POINT

        -a 表示挂载/etc/fstab文件中定义的所有文件系统

        -n 默认情况下,mount命令每挂载一个设备,都会把挂载的设备信息保存至/etc/mtab中,使用-n选项意味着挂载设备时,不把信息写入此文件。

        -t FSTYPE:指定正在挂载设备上的文件的类型;不使用此选项时,mount会调用blkid命令获取对应文件系统的类型。

        -r:只读挂载,挂载光盘时使用此选项

        -w:读写挂载

        -o:指定额外的挂载选项,也即指定文件系统启用的属性。

                remount:重新挂载当前文件系统

                ro:挂载为只读

                rw:读写挂载

挂载完成后,通过挂载点访问对应文件系统上的文件。

        umount:卸载某文件系统

        umount 设备         umount  挂载点

        注意事项:挂载的设备没有进程使用

1、创建一个2G的分区,文件系统为ext2,卷标为DATA,块大小为1024,预留管理空间为磁盘分区的8%;挂载至/backup目录,要求使用卷标进行挂载,且在挂载时启动此文件系统上的acl功能;

    1.创建分区:fdisk    /dev/sda8

    2. 分区格式化:mke2fs -L  DATA  -b 1024 -m 8 /dev/sda8

    3.挂载:      mount  -o acl   LABEL=DATA    /backup

2. 将此文件系统的超级块中的信息中包含了block和inode的行保存至/tmp/partition.txt中;

    tune2fs -l  /dev/sda1 | egrep 'inode|block'

    dumpe2fs -h  /dev/sda1 | grep -E 'inode|block'

‍3、复制/etc目录中的所有文件至此文件系统;而后调整此文件系统类型为ext3,要求不能损坏已经复制而来;

    

    cp  -R  /etc/*   /backup

    tune2fs -j   /dev/sda8

4、调整其预留百分比为3%;
# tune2fs -m 3 -L DATA /dev/sda8

5、以重新挂载的方式挂载此文件系统为不更新访问时间戳,并验正其效果;

    # stat /backup/inittab
    # cat /backup/inittab
    # stat
 
    # mount -o remount,noatime /backup
    # cat
    # stat

6. 对此文件系统强行做一次检测;

      e2fsck -f /dev/sda8

7、删除复制而来的所有文件,并将此文件系统重新挂载为同步(sync);而后再次复制/etc目录中的所有文件至此挂载点,体验其性能变化;

    rm -rf /backup/*

    mount -o remount,sync /backup

    cp -R  /etc/*   /backup

    13.开机挂载/etc/fstable和/etc/mtab  

    1.规则:

    1.根目录必须挂载,且一定要先于其他挂载点被挂载出来。

    2.其他挂载点必须为已新建的目录,可任意指定,弹药遵从系统目录架构原则。

    3. 所有挂载点在同一时间之内,只能挂载一次。

    4.所有分区在同一时间之内,只能挂载一次。

     <file system> <mount point>   <type>  <options>       <dump>  <pass>

    2.挂载光盘文件

    mount -o loop mount设备  mount point

    14.内存交换空间swap
   1.    mkswap /dev/sda8   -L  LABEL

        swapon   /dev/sda8

         swapoff  /dev/sda8

2.fuser: 验正进程正在使用的文件或套接字文件
     -v: 查看某文件上正在运行的进程
     -k:
     -m
     fuser -km MOUNT_POINT:终止正在访问此挂载点的所有进程

 

              

你可能感兴趣的:(linux,磁盘管理)