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)
上一篇 2016-08-29 08:52
下一篇 2016-08-29 08:54

相关推荐

  • 软件包管理详解

      软件包管理器 1、功能: (1)将软件包打包成一个文件,其中包括: ①二进制程序 ②库文件 ③配置文件 ④帮助文件 (2)生成数据库,追中所安装的每一个文件。 2、软件包管理器的核心功能: (1)制作软件包 (2)安装、卸载、升级、查询、校验 3、不同发行版的不同的…

    2017-08-11
  • Linux系统启动流程

    对于linux系统的初学者来说,理解并掌握linux系统启动流程能够使你够深入的理解linux系统,还可以通过系统的启动过程来分析问题解决问题。   Linux系统的启动流程   关于linux系统的启动流程可以分为以下步骤:     POST(加电自检)–>加载BIOS(Basic Inp…

    Linux干货 2015-05-18
  • Nginx 编译安装

    简介 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配…

    Linux干货 2016-12-01
  • 函数式编程

    当我们说起函数式编程来说,我们会看到如下函数式编程的长相: 函数式编程的三大特性: immutable data 不可变数据:像Clojure一样,默认上变量是不可变的,如果你要改变变量,你需要把变量copy出去修改。这样一来,可以让你的程序少很多Bug。因为,程序中的状态不好维护,在并发的时候更不好维护。(你可以试想一下如果你的程序有个复杂的状态,当以后别…

    Linux干货 2016-08-15
  • Liunx系统命令的使用格式

    Liunx系统命令的格式 基本格式如下:               ~]# COMMAND OPTIONS ARGUMENTS COMMAND:      发起一个命令,请求内核将某个二进…

    Linux干货 2016-10-28
  • keepalived单主模型和nginx双主模型

    主程序:keepalived 主配置文件:/etc/keepalived/keepalived.conf 单主模型ipvs: global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0….

    Linux干货 2017-08-08

评论列表(1条)

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

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