linux磁盘管理

硬盘接口类型:

        IDE:并口,133M/s;100个IO/s
        SCSI:并口,UltraSCSI320,320M/s UltraSCSI640 640M/s 150-200IO/s
        SATA:串口,6Gbps/8=750M/s 100IO/s
        SAS:串口,6Gpbs
        USB:串口 480M/s
        注意:上述速度指的是接口定义的最快速度,但实际传输可能到不到上面所述的速度。
    lops:每秒能完成多少个IO,每个IO就是一次存取操作,机械硬盘 400IO/s。
    
设备类型:

        块设备:随机访问,数据交换单位是“块”
        字符设备:线性访问,数据交换单位是“字符”
           设备文件:存储数据指针的空间当中存储的是设备号,位图索引,关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信。

           设备号:
                major:主设备号,区分设备类型,用于标明设备所需要的驱动程序           
                minor:次设备号,区分同种类型下的不同设备,是特定设备的访问入口

           引用设备的方式:
                设备文件名
                卷标
                UUID:可以唯一标识一个设备

磁盘的基础知识:

        盘面最外侧是0磁道,依次往里递增(0磁道存放MBR)
        扇区固定大小512个字节
        磁道一圈最多63个扇区
        磁道最多1024个
        磁头数等同于盘面数最多256个
        柱面的大小=扇区大小*扇区数*盘面数=512字节*63个*256个=7.875M
        磁盘的三维:CHS —cylinder 柱面  head 磁头   secotr 扇区

磁盘分区:
        两种分区方式:

                MBR: Master Boot Record, 使用32位表示扇区,分区不能超过2T数, 分区不超过2T,cenots6 按照柱面分区,cenots7按照扇区分区,0磁道0扇区主引导分区MBR 512字节,446引导程序,64分区表,16B引导一个分区,最多4个分区,2bytes,55AA,用于标识硬盘是否分区,且最多4个主分区或3个主分区+1扩展(N个逻辑分区)。
                注意:MBR位于0磁道0扇区的主活动分区,每块逻辑分区都有自己的EBR,当我们备份主分区的MBR时:dd if=/dev/sda of=/testdir/mbrbak bs=1 count=512 , 要求还原的硬盘与备份的硬盘大小一致,此时恢复只能恢复主分区的,不能恢复逻辑分区。

                        dd if=/dev/zero of=/dev/sdd bs=1 count=2 skip=510 seek=510 覆盖55AA
                        hexdump -C -n 512 /dev/sda     以二进制形式查看/sda设备的前512个字节
                                 -v 显示所有信息
                                 -C 以二进制形式显示
                        有一个大与2K的二进制文件fileA。 现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?
                            dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
                GPT:  Globals Unique Identifiers,partition  table 支持128个分区,使用64位,支持8Z(512Byte/block ) 64Z (4096Byte/block)
                        使用128位UUID 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位
                        UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动
                    
       磁盘的组成部分:

       1、MBR:主引导分区512bytes,446引导程序,64分区表,16B引导一个分区,最多4个分区,2bytes,55AA,用于标识硬盘是否分区。
       2、super block: 存放块组信息,记录的是inode和block 应该有多少个block,已用多少,剩余多少。
       3、inode:有文件存储在block的时候,在inode的位置都会有该文件相关的记录,记录该文件的属性信息,user、group等,也会指明该文件存放在那个block里,相当与目录,内容存在block中。
       4、block:存储内容的,每一个block成为一个块,默认是4k,block是真正存储文件的地方,当一个block存储数据后,如果有剩余也不 能存储其他文件了,文件1k,block4k,该block也不能用了,划分分区的时候可以指定block的大小,如存储12k的文件,会占用3个 block,如果说一个block1k那么会占用12个block,那么读取的block会比价多,寻到时间会比较长,效率比较低。  

        Block group的组成部分:

        第一部分:存储的是super block
        第二部分:文件系统的描述信息,比如每个block group是从第几个开始到第几个block结束。
        第三部分:块位图/块对照表 那些block没有被使用,哪些被使用了
        第四部分:inode位图 哪些inode被使用,哪些剩余
        第五部分:inode表 每记录一个文件都会在inode写相应的条目,保存文件的属性信息,每记录将消耗128B的空间,每次指向一个block块将消耗4B,一共可指向32个块。

 
磁盘管理相关命令:


    列出设备:
            lsblk
            cat  /proc/partitions
            ls /dev/sd*
            注意:上述三种方法列出内存中的设备信息,可能会存在不同步的问题。
           系统添加硬盘后让其识别的方法:
                            echo "- – -" > /sys/class/scsi_host/host2/scan  centos6 上添加硬盘之后,让系统识别
                            echo "- – -" > /sys/class/scsi_host/host0/scan  centos7       

   
      创建、编辑分区:    

              fdisk:
                1、查看磁盘的分区信息
                        fdisk -l device:查看指定磁盘的设备的分区信息
                        fdisk -lcu 以扇区的形式显示  centos6 默认是以柱面单位显示分区的

                2、管理分区
                        fdisk提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能,所有操作都在内存中完整,没有直接同步到磁盘,只有当执行保存w命令时才同步到磁盘。
                        常用命令:
                           d: 删除
                           n: 新建
                           p: 列出
                           t: 调整分区ID
                           l: 列出内核支持的分区ID
                           w: 保存退出
                           q: 不保存退出         
                    注意:在已有的分区或者已经创建挂载的分区上面创建新的分区,内核可能无法立即识别,需要重新通知内核识别。

             parted:
                parted的操作都是实时生效的,小心使用
                用法: parted [选项]… [设备 [命令 [参数]…]…]
                        parted /dev/sdb mklabel gpt|msdos    将磁盘类型转换为gpt 或msdos形式
                        parted /dev/sdb print    打印当前分区
                        parted /dev/sdb mkpart primary 1 200 (默认M)    划分一个起始位置为1,大小为200M的分区
                        parted /dev/sdb rm 1    删除第一个分区

      通知内核重新识别新的分区:

           新增分区用
                    partx -a -n M:N /dev/DEVICE
                    kpartx -a /dev/DEVICE -f: force
            删除分区用
                    partx -d -n M:N /dev/DEVICE
                        centos6: –nr N-M
            CentOS 5, 7: 使用partprobe(此命令在centos6中不起作用)
                        partprobe [/dev/DEVICE]

文件系统:

    文件系统类型:

        Linux文件系统: : ext2(Extended file system), ext3,ext4, xfs( SGI) , btrfs( Oracle) , reiserfs, jfs(AIX) , swap
        光盘: iso9660
        Windows: fat32, ntfs
        网络文件系统: NFS, CIFS
        集群文件系统: GFS2, OCFS2( oracle)
        分布式文件系统: ceph, moosefs, mogilefs, glusterfs,Lustre
        RAW:未经处理或者未经格式化产生的文件系统

    文件系统分类:

        根据其是否支持"journal"功能:
                日志型文件系统: ext3, ext4, xfs, …
                非日志型文件系统: ext2, vfat
        文件系统的组成部分:
                内核中的模块: ext4, xfs, vfat
                用户空间的管理工具: mkfs.ext4, mkfs.xfs,mkfs.vfat
        Linux的虚拟文件系统: VFS
        查前支持的文件系统: cat /proc/filesystems

    文件系统的管理工具:

        创建文件系统的工具:mkfs mke2fs
        检测及修复文件系统的工具:fsck e2fsck(ext文件系统专用)
        查看文件系统的属性的工具:tune2fs dumpe2fs
        查看或设定卷标的工具:e2label
        查看文件系统的UUID和文件系统类型、卷标:blkid
        查看磁盘的使用情况:df
        查看目录的大小:du
        查找分区:findfs
        查看当前系统上挂载的设备:mount | cat /etc/mtab | cat /proc/mounts
        查看挂载点被哪个程序或进程所占用:lsof | fuser -v
        终止所有正在被访问的挂载点进程:fuser -km

        mke2fs:
            mke2fs [option] device
                -t{ext2|ext3|ext4}:指明要创建的文件系统类型。
                -L LABEL:指明卷标
                -b{1024|2048|4096}:指明块大小
                -j:创建有日志功能的文件系统ext3
                       mke2fs -j = mke2fs -t ext3 = mkfs.ext3
                -i#:bytes-per-inode,每多少个字节一个inode,指明inode与字节的比例,此大小不应该小于block的大小。
                -I :一个inode记录大小128—4096
                -N#:直接指明要给此文件系统创建的inode数量
                -m#:指定预留空间的百分比,默认5%
                -O FEATURE[,…]:启用指定特性
                -O ^FEATURE:关闭指定特性

        e2label:
            e2label device:查看卷标
            e2label device LABEL 设定卷标
    
        findfs:
            findfs [options] LABEL=labelname
            findfs [options] UUID=uuid

        tune2fs:
                -l device:查看超级快的属性信息
                -L LABEL:指明卷标
                -m#:指定预留给管理员的空间百分比
                -O[^]feather:开启或关闭某中特性
                         tune2fs -O ^has_journal /dev/sda3 关闭日志功能
                         tune2fs -O has_journal /dev/sda3 开启日志功能
                -o[^]mount_options:开启或关闭某种挂载选项
                        tune2fs -o acl /dev/sda3 默认挂载到acl
                 -j: 将ext2升级为ext3
                 -U UUID: 修改UUID号

        dumpe2fs命令:显示ext文件系统的属性信息(超级快和块组的信息)
                dumpe2fs [-h] /dev/sda5

        e2fsck:
                -y:对所有问题自动回答为yes
                -f:及时文件系统处于clean状态,也要强制进程检测

        fsck:
                -t:指明文件系统类型
                -a:无需交互自动修复错误
                -r:交互式修复
    因进程意外终止,或者系统崩溃等原因导致正常操作终止,可能造成文件系统损坏,此时应该检测并修复文件系统,建议离线进行,不要挂载。

        blkid:
                -L LABEL:根据LABEL定位设备
                -U UUID:根据UUID定位设备

        df:
                -T:显示系统类型
                -l:显示本地文件的信息
                -h:human-readable
                -i:显示inode的状态而非block

        du:
                du -sh /etc 查看/etc/目录的大小

        swap交换分区:
                创建交换分区:mkswap
                 -L LABEL:指明卷标
                启用/禁用:swapon/swapoff

挂载mount        

根文件系统之外的文件系统要想能够被访问,都必须通过“关联”至根文件系统上面的某个目录来实现,此关联操作即为挂载,目录即为挂载点。

    挂载点:用于作为另外一个文件系统的访问入口
        1、事先存在,
        2、应该未被使用或不被其他进程使用到的目录
        3、挂载之后原有的文件将会被隐藏

    mount的常用选项:
        -r:只读挂载,光驱
                mount -r /dev/cdrom /media/media
        -w:读写挂载
        -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab中,-n禁用此特性
        -t vfstype:指明要挂载的设备上文件系统的类型,可省略,此时mount会自动通过blkid自动识别文件系统的类型、
        -a:自动挂载所有/etc/fstab文件中支持自动挂载的设备
        -L LABEL:挂载时以卷标的方式指明设备
                mount -L LABEL /media
        -U UUID:挂载以UUID的方式指明设备
                mount -U UUID dir
        -B, –bind: 绑定目录到另一个目录上

        -o option选项:
                sync/async:同步(内存更改时,同时写磁盘)/异步操作
                atime/noatime:文件或目录被访问的时候是否更改其时间戳
                diratime/nodirname:目录被访问的时候是否更改时间戳
                remount:重新挂载
                acl:支持使用facl功能
                ro:只读
                rw:读写
                uto/noauto: 是否能够被mount -a选项自动挂载
                dev/nodev:此设备上面是否允许创建设备文件
                exec/noexec:是否允许运行此设备上面的程序文件
                user/nouser:是否允许普通用户挂载此文件系统
                suid/nosuid:是否允许程序文件上面的suid生效
                default:rw nosuid exec auto nouser async reatime

        查看挂载情况:
                mount
                cat /etc/mtab
                cat /proc/mounts  (最全)

        查看正在访问指定文件系统的进程:
                lsof MOUNT_POINT
                fuser -v MOUNT_POINT

        终止所有在正访问指定的文件系统的进程:
                fuser -km MOUNT_POINT

        取消挂载:
                umount DEVICE
                umount MOUNT_POINT
                
            补充:centos7 添加misc 文件夹的方法

                            yum install autofs -y
                            systemctl start autofs

 

原创文章,作者:Naruto,如若转载,请注明出处:http://www.178linux.com/40448

(0)
NarutoNaruto
上一篇 2016-08-29
下一篇 2016-08-29

相关推荐

  • test

    test

    Linux干货 2016-08-08
  • CA和证书

    A与B双方通信,需要通过签证机构CA颁发证书,才可以互相信任,从而安全的进行数据传输。想要获取证书,除了付费购买认证机构的证书,还可以自签名获取证书。 openssl命令可以搭建CA,实现自签名证书。下面以三台主机为例,模拟根CA、子CA的搭建,以及客户端申请证书的过程。 一、搭建根CA /etc/pki/tls/openssl.cnf文件是openssl的…

    2017-09-10
  • 无痛之ext3升ext4[原创]

    一台文件存储服务器单目录下子目录已经突破31998数限制,造成无法继续创建子目录,服务器系统环境为CentOS5.4 内核版本为2.6.18。解决方案只能是升级到ext4文件系统,首先到https://ext4.wiki.kernel.org/index.php/Ext4_Howto查了一下资料,文中的第一句便是“Ext4 was released as a…

    Linux干货 2015-03-27
  • Python函数式编程指南(四):生成器

    转自 http://www.cnblogs.com/huxi/archive/2011/07/14/2106863.html 生成器是迭代器,同时也并不仅仅是迭代器,不过迭代器之外的用途实在是不多,所以我们可以大声地说:生成器提供了非常方便的自定义迭代器的途径。 这是函数式编程指南的最后一篇,似乎拖了一个星期才写好,嗯…… 转载请注明原作者和原文地…

    Linux干货 2015-03-09
  • linux系统上命令使用格式及常见命令

    [root@localhost ~]# date -d ‘2017-07-06 00:00:00 ‘  用上面这条指令讲解命令使用格式 date command  -d 是参数,参数有可选参数,必选参数,在参数前必选加上- ,还是以这条指令为列,-d可以写成–date,如果写成date,date前面必选…

    Linux干货 2017-08-19
  • bash的基础特性[更新中]

    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
    3、请使用命令行展开功能来完成以下练习:
    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
    (2)、创建/tmp/mylinux目录下的:
    mylinux/
    ├── bin
    ├── boot
    │   └── grub
    ├── dev
    ├── etc
    │   ├── rc.d
    │   │   └── init.d
    │   └── sysconfig
    │   └── network-scripts
    ├── lib
    │   └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │   └── local
    │   ├── bin
    │   └── sbin
    └── var
    ├── lock
    ├── log
    └── run
    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
    6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
    7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
    8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
    9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
    10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
    11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
    12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    2018-03-17

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-29 11:57

    文章结构层次清晰,内容完整,建议多些实际操作,只有理论和实践结合起来,才能更好的的发现问题,并将其总结成经验。