您的位置:新葡亰496net > 电脑系统 > 管理文件系统,故障管理

管理文件系统,故障管理

发布时间:2019-11-05 02:32编辑:电脑系统浏览(169)

    遵纪守法Ali云官方网站教程对云服务器进行磁盘扩容,使用fdisk重新分区,最后使用e2fsck和resize2fs来成功文件系统层面包车型大巴扩容

    新建

    Step 1 物理分区fdisk
    应用fdisk命令创设新分区,并应用fdisk的t命令修改分区类型为8e(lvm类型)。暗中认可分区id都是83,即linux文件类型,文件类型ID为82,则为交流分区swap。

    fdisk -l
    fdisk /dev/sdb //分区后重启linux(或执行partprobe,不需重启即可通知内核)。
    

    fdisk /dev/sdb
    Command (m for help): n # 输入n新建二个分区
    Command action
    e extended
    p primary partition (1-4)
    p # 输入p新建一个主分区
    Partition number (1-4): 1 # 分区号
    First cylinder (1-1044, default 1): 一向回车,使用暗许的初叶柱面
    Last cylinder, cylinders or size{K,M,G} (1-1044, default 1044): 32G # 大小,如若直白回车,使用暗中认可结束柱面,那对于那块硬盘,只创建三个分区,大小是全方位磁盘。
    Command (m for help): t # 更动类型
    Selected partition 1
    Hex code (type L to list codes): 8e # LVM 的分区代码;暗许分区id都是83,即linux文件类型;文件类型ID为82,则为调换分区swap。
    Changed system type of partition 1 to 8e (Linux LVM)
    Command (m for help): w # 输入w, 保存分区表并退出

    抑或地点不实行,间接利用整块盘,后续/dev/sdb1替换为/dev/sdb。

    Step 2 创建PV pvcreate
    大要磁盘被格式化为PV,空间被划分为几个个PE,各种暗中同意大小是4MB。

    pvcreate /dev/sdb1
    

    提示未有此命令,则必要根据最终的指点安装lvm。

    Step 3 新建vgcreate
    新建

    vgcreate vgaze /dev/sdb1 /dev/sdb2  //新建卷组,dev下会多处一个名为vgaze的目录。
    

    Step 4 新建lvcreate
    LV实际由LE组成,LE与PE豆蔻梢头风流洒脱对应,LV大小为PE的大背头倍,组成LV的PE也许来自不一致的物理磁盘。
    新建

    lvcreate -n lvaze  -L 256M vgaze //在卷组vgaze中建立名为lvaze的逻辑卷,目录vgaze中会多一个名为lvaze的符号链接。
    lvdisplay
    

    Step 5 制造文件系统

    mkfs -t ext3 /dev/vgaze/lvaze //在lv上创建文件系统
    

    Step 6 挂载

    mkdir /root/aze //创建挂载点
    mount  /dev/vgaze/lvaze /root/aze //挂载文件系统
    

    Step 7 更新/etc/fstab
    根基运维进度会读取/etc/fstab配置文件来机关挂载磁盘,把LVM创制的逻辑卷挂载消息写入这几个文件,就没有必要在开机后手动挂载。

    # 执行vi /etc/fstab命令,在最后追加一行。
    /dev/vgaze/lvaze    /root/aze    ext3    defaults    0    2
    执行:wq!保存退出
    

    测量试验开机自动挂载

    mount -a
    df -h
    

    扩大容积Linux文件系统

    1. mount 查看当前系统全部分区挂载情形,包涵分区类型

    在施行“e2fsck -f /dev/vdb1”命令时报错,假诺你的主题素材和底下的荒唐相近,能够跟着往下看:

    逻辑卷扩缩容

     

    /dev/vda1 on / type ext4 (rw,errors=remount-ro)

    正文目录:

    [root@aliyunsrv ~]# e2fsck -f /dev/vdb1 
    e2fsck 1.41.12 (17-May-2010)
    e2fsck: Superblock invalid, trying backup blocks...
    e2fsck: Bad magic number in super-block while trying to open /dev/vdb1
    
    The superblock could not be read or does not describe a correct ext2
    filesystem.  If the device is valid and it really contains an ext2
    filesystem (and not swap or ufs or something else), then the superblock
    is corrupt, and you might try running e2fsck with an alternate superblock:
        e2fsck -b 8193 <device>
    

    逻辑卷扩大体积

    Step 1 新增添硬盘创设物理卷(先fdisk卡塔尔
    pvcreate /dev/sdc1

    Step 2 物理卷参加卷组
    vgextend /dev/vgaze /dev/sdb1

    Step 3 卸载
    umount /dev/vgaze/lvaze

    Step 4 扩展lv
    lvextend -L 1024M /dev/vgaze/lvazelvresize -L 40G /dev/vgaze/lvazelvresize -L 20G /dev/vgaze/lvaze

    Step 5 检查磁盘错误,等待时间较长可以思量跳过(挂载状态不可能检查卡塔尔国
    e2fsck -f /dev/vgaze/lvaze

    Step 6 重设文件系统大小
    resize2fs /dev/vgaze/lvaze

    Step 7 挂载
    mount -t ext2 /dev/vgaze/lvaze /root/aze

    管理文件系统,故障管理。Tencent云 云硬盘扩容

    /dev/vdb1 on /sda type ext4 (rw)

    5.1 固态硬盘

    依照提醒施行“e2fsck -b 8193 /dev/vdb1”,并不曾什么用

    逻辑卷缩容

    Step 1 卸载lv分区
    umount /root/aze

    Step 2 反省磁盘错误
    e2fsck -f /dev/vgaze/lvaze

    Step 3 重设文件系统大小
    resize2fs /dev/vgaze/lvaze 200M

    Step 4 缩减lv大小
    lvreduce -L 200M /dev/vgaze/lvazelvresize -L 10G /dev/vgaze/lvazelvresize -L -30g /dev/vgaze/lvaze

    Step 5 挂载分区
    mount /root/aze

    1. fdisk -l 展现分区音讯

    5.2 磁盘或分区容积计算

    依照报错音信测度是该工具并从未找到super-block,也正是分区初始地点有标题

    LVM命令

    任务 PV 阶段 VG 阶段 LV 阶段
    列出 (display) pvdisplay vgdisplay lvdisplay
    搜寻 (scan) pvscan vgscan lvscan
    创建 (create) pvcreate vgcreate lvcreate
    删除 (remove) pvremove vgremove lvremove
    改变容量 (resize) lvresize
    扩展 (extend) vgextend lvextend (lvresize)
    减少 (reduce) vgreduce lvreduce (lvresize)
    改变属性 (attribute) pvchange vgchange lvchange

    change,有变动后须要激活?

    Disk /dev/vda: 53.7 GB, 53687091200 bytes

    5.3 分区

    因为早就再次创设分区表,所现在前查看了指令记录开掘,分区的发端地点在103处,

    安装LVM

    uname -a //查看内核消息
    yum install lvm2 device-mapper //安装 LVM2,linux内核2.6.9本子发轫,不用单独安装device-mapper,已经满含在内,只需加载就能够。
    modprobe dm_mod //加载mapper模块
    lsmod | grep dm_mod //是或不是加载了dm_mod

    普通云硬盘(HDD Cloud Storage卡塔 尔(阿拉伯语:قطر‎ 容积最大为16TB
    高质量云硬盘(Premium Cloud Storage卡塔尔国 容积最大为4TB
    SSD云硬盘(SSD Cloud Storage卡塔 尔(阿拉伯语:قطر‎ 体量最大为4TB
    单台设想机最多可挂载 10 块云盘,容量达 40TB。您能够轻松搭建大体积的文件系统,用于大数量、数据客栈、日志管理等职业。

    Disk identifier: 0x000da36d

    5.4 格式化分区

    [root@aliyunsrv ~]# fdisk -l
    
    Disk /dev/vda: 53.7 GB, 53687091200 bytes
    255 heads, 63 sectors/track, 6527 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: 0x00078f9c
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1        6527    52426752   83  Linux
    
    Disk /dev/vdb: 536.9 GB, 536870912000 bytes
    2 heads, 10 sectors/track, 52428800 cylinders
    Units = cylinders of 20 * 512 = 10240 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x63c3e6e0
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/vdb1             103    52428800   524286976   83  Linux        # 分区起始位置在103,很重要,需要确定
    

    /etc/fstab内容介绍

    /etc/fstab文件内容有6列:
    <file system> <dir> <type> <options> <dump> <pass>

    /dev/vgaze/lvaze /root/aze ext3 defaults 0 2

    第一列<file system>:磁盘/LV的门路或UUID
    其次列<dir>:挂载点目录
    其三列<type>:磁盘文件系统的格式
    第四列<options>:文件系统参数,defaults,等于rw, suid, dev, exec, auto, nouser, async。
    第五列<dump>:dump utility根据此值决定是不是备份,借使值为0,dump忽视此文件系统,假诺是1,dump会对此系统作叁个备份。大部分顾客并未有设置dump,所以这些值应该写为0。
    第六列:是还是不是用fsck核算文件系统完整性,值能够是0,1和2。 值为0,则不会被fsck utility检查。值为1,具有fsck检查的最高优先级,root文件系统应该拥有最高的优先权。别的文件系统,纵然想用fsck检查,则值为2。

    请留神,由于MBRubicon的约束,选择别的风流倜傥种艺术时,请保持恣心纵欲分区的高低不超过2TB(若你扩大体积后的上空已经超(英文名:jīng chāo卡塔尔越2TB则不得选用第三种办法。

    Device Boot      Start        End      Blocks  Id  System

    5.5 查看文件系统状态音信

    由此其实能够估摸出阿里云的磁盘扩大体量以来或许出标题了,以前分区我写的自然是1,不过扩大容积后就变了,那些理应是导致这些难点的由来

    不使用LVM

    • Step 1 分区fdisk
    • Step 2 创建文件系统mkfs
    • Step 3 挂载mount
    • Step 4 更新/etc/fstab

     

    /dev/vda1  *        2048  104855551    52426752  83  Linux

    5.6 挂载和卸载文件系统

    提Ali云工单取得的结果是用testdisk举行数据恢复,显著那一个不是自个儿要的章程,那些只是分区表损坏,数据并未有丢,管理好分区表即可。

    主分区与扩大分区,MB揽胜与GPT

    硬盘的首先个扇区(第0扇区卡塔 尔(英语:State of Qatar)用来存放主引导记录(MB昂Cora),也称MB哈弗扇区。三个扇区是512字节,因而MBCRUISER扇区的分寸也是512字节,其现实数据结构是:4四十四个字节的教导代码、六12个字节的分区表及2个字节的具名值"55AA"。由于MBKoleos的分区表独有66个字节,一个分区要求16Bytes空中来积存相关新闻,所以分区表只可以存储4个分区记录。

    主分区(注意扩大分区也是三个主分区)的最大个数是四,当创立八个主分区时,就不能够再创立扩大分区。

    为了突破七个主分区的约束,更加好布署磁盘空间大小,Linux系统引进了扩张分区的概念(相似把主分区举行划分,衍生出二级分区表卡塔 尔(阿拉伯语:قطر‎。管理员能够把内部一个主分区设置为扩大分区(注意只能运用一个扩张分区)来开展增添。扩展分区不能直接利用,必得细分成逻辑分区本领够用来积存数据。

    MB昂科雷分区格式的最大分区为2TB,GPT分区未有2TB的节制,理论上最大分区为18EB。倘若要创立大于2TB的GPT分区,就无法使用MBOdyssey格式的分区表,需求使用linux 下的Parted分区工具。

    貌似系统一分配区方案
    /boot 500M
    / 30G
    SWAP 8G
    /data 剩下空间

    Disk /dev/vdb: 322.1 GB, 322122547200 bytes

    5.7 swap分区

    在英特网找到的其他老铁的缓慢解决思路尝试能够解决,以往重新收拾下供我们参照他事他说加以考察

    闻一知十原有磁盘

    气象:磁盘扩大体量(不是新添一块硬盘卡塔 尔(英语:State of Qatar)后,系统无法立就算用。

     

    Disk identifier: 0x000da36d


    亟需使用到parted分区工具,以下操作注意数据备份!!!

    LVM扩大体积:使用parted工具扩大体量扩大分区(柱面末端卡塔 尔(阿拉伯语:قطر‎,可能新扩张主分区,然后fdisk格式化、lvm管理。

    parted工具扩大容积扩充裕区
    parted /dev/xxx
    print 查看分区表,留意目标分区的’Number’ 项,前边要用。

    Number  Start   End     Size    Type      File system  Flags
    1      1049kB  256MB   255MB   primary   ext2         boot
    2      257MB   8589MB  8332MB  extended
    5      257MB   8589MB  8332MB  logical                lvm
    

    波及到磁盘大小退换,提出预先留下1G空间容差:
    unit命令用于转移 parted 所用的叙说大小的默许单位(比方设为 ‘compact’ 正是以 ‘MB’ 为单位)。值得注意的是,假设用 MB/GB 那样的单位,磁盘 sector 的选取会有固有误差的。parted 会为你选这几天的 sector,但不一定精确。譬如 unit 为 MB,那么也许发生 -500KB 的引用误差;若是是 GB,那就也许 -500MB 的引用误差,那就不可能耐受了。所以假如是’成立分区’那样的操作,提出用 ‘MiB’ 这样的单位,并非 ‘MB’。’MiB’ 会是一个正确值,parted 不会像对待 ‘MB’ 那样去找它方今的单元。

    对点名Number为2的分区从 start 地方为257MB到end地方为磁盘末尾。
    resize 2 257MB -0

    新增添逻辑分区
    通过 fdisk <disk_dev_name> 进入相互形式,能够由此命令 m 查看扶持。首先,输入 n 创设新分区,然后选择 l 设置新分区为逻辑分区,接下去依次安装分区的最早、终止地点(暗中同意即完全使用这块磁盘上多余的持有空中,所以暗中同意就能够卡塔 尔(阿拉伯语:قطر‎。

    上述也足以一贯增加产能多少个主分区/扩大分区
    无法扩大体量主分区,因为本来的分区已经在选择无法格式化

    格式化与利用lvm管理
    把新分区的管住种类从 Linux 改为 Linux LVM,参与到现存lv。


    Device Boot      Start        End      Blocks  Id  System

    5.1 固态硬盘

    机械硬盘由多块盘片组成,它们都绕着主轴旋转。每块盘片上下方皆有读写磁头悬浮在盘片上下方,它们与盘片的间隔十分的小。在每一趟读写多少时盘片旋转,读写磁头被磁臂调整着穿梭的移动来读取当中的数目。

    富有的盘片都是还要意气风发并转动,全部的磁头也是协同移动。

    新葡亰496net 1

    新葡亰496net 2

    新葡亰496net 3

    磁盘在情理上划分了扇区、磁道和柱面。假如划分了分区,则分区是逻辑上柱面包车型地铁相间边界。

    读写磁头在甘休状态下,在盘片旋转时磁头扫过的大器晚成圈轨迹称为磁道,全部的磁道都以同心圆。从盘片外圈开始向内数,磁道号从0最早逐数扩展。

    每一个磁道以512字节等分为多个弧段。所以外圈磁道的扇区数超级多,内圈磁道的扇区数少之又少,有些硬盘参数上写的磁道扇区数平日用多个范围来标识,如373-768表示最外侧磁道有767个扇区,最内圈有3柒拾四个扇区,那就能够总结出各类磁道的字节数。

    每一个扇区512字节,扇区是磁盘调控器的微小读写单元。Windows操作系统以"簇"为存款和储蓄单元,四个"簇"是三个扇区(能够是2、4、8...个扇区),不过读写央浼发送到磁盘调控器上仍是以扇区为单位的。之所以以"簇"为单元是因为能够确切制止碎片使得同二个文本的多寡所在的扇区现身物理间距,那样不断的运动磁头会严重消沉读写速度。

    扇区上记下了物理数据、扇区号、磁头号(或然盘片号)及磁道号。

    新葡亰496net 4

    旧式磁盘的布局不分区(without zones),每一种磁道扇区数相同,可是各类扇区仍然为512字节,也正是说磁性材质记录的0和1的多寡是相近的。这种组织的劣点是外围磁道的面积大,存款和储蓄的数据分布宽松,内圈磁道面积小,存款和储蓄的数据布满密集,那样就导致盘片外圈面积浪费。

    风行磁盘结构进行了分区,将种种磁道等面积划分512字节的长空作为三个扇区,所以分歧磁道扇区数不一样。

    明天的磁盘都是流行扇区划分结构。

    新葡亰496net 5

    将兼具盘片相仿磁道数的磁道划分为柱面。和磁道号的符号方式相仿,从外向内从0开头逐数扩大。

    据此划分柱面,是因为全体磁盘同步旋转,全体磁头同步移动,全数的磁头在随便二个成天三番五遍会出在同四个磁道同贰个扇区上。读写多少时,大肆少年老成段数据连接按柱面来读写的。所以盘片数越来越多,读写所扫的扇区数就越少,所需的时刻相对就越少,质量就越好。

    管理文件系统,故障管理。盘片同步旋转,转动三个角度,外圈比内圈的线速度更加快,磁头能够扫过的扇区数更加多,由此读写越外圈磁道中的数据比越内圈更加快。

    向磁盘写多少是从外圈柱面向内圈柱面写的,独有写完叁个柱面才写下一个柱面。由此磁盘用过风度翩翩段时间后存款和储蓄东西的速度会怀有放缓便是因为外面柱面已经用掉了。

    新葡亰496net 6

    1.施用parted工具读取磁盘分区表音讯

    # 小编在Ali云调节台扩充的分区大小为1024GB

    parted /dev/vdb
    

    非LVM扩大容积:只好对最后叁个分区操作(柱面末端卡塔 尔(阿拉伯语:قطر‎

    反省叁回
    fsck -f /dev/sdb3

    除去现存分区,重新分区
    fdisk /dev/sdb3

    • 输入d删除现存分区,注意:删除后千万不要按w保存
    • 输入n成立新分区,从原始柱面起头,到终极(暗中同意值五次回车就能够,要是以前的分区不是从第一柱面开端,则必要记录早先分区的胚胎柱面)
    • 新的分区操作截至后,按w保存。

    自己批评二次
    fsck -f /dev/sdb3

    双重定义分区大小
    resize2fs /dev/sdb3

    再一次挂载分区,查看分区
    mount /dev/sdb3/mnt/
    df -h

     

    /dev/vdb1            2048  629145599  314571776  83  Linux

    5.2 磁盘或分区体积计算

    虽说未来的磁盘都以最新结构(每磁道扇区数不相同),不过在磁盘新闻上依然基于旧式结构来计量的,约等于说每一个磁道扇区数相像,"扇区/磁道"的值表达每一个磁道上有多少个扇区,也能够将其以为是风靡结构下的平均值。

    磁盘相关克罗地亚语:

    disk

    磁盘

    heads

    磁头。Linux系统中查看到的heads一般包括很多虚拟磁头,实际的物理磁盘的一块盘片上下两面一面一磁头,即2个磁头。

    sectors

    扇区。一磁道上划分多个扇形区域,一般默认一扇区512字节。

    track

    磁道。盘片上一圈算一磁道。

    cylinders

    柱面。所有盘片的同一半径的磁道组成一柱面。柱面数=盘片数*盘片上的磁道数。

    units

    单元块。大小等于一个柱面大小。

    磁盘或分区大小总括方法:

    磁盘大小=units×柱面数(cylinders)

    磁盘大小=磁头数(heads)×每磁道上的扇区数(sectors)×512×柱面数(cylinders)

    例如:查看/dev/sda3。

    [root@xuexi tmp]# fdisk -l /dev/sda3
    Disk /dev/sda3: 19.1 GB, 19116589056 bytes         # 总大小19G
    255 heads, 63 sectors/track, 2324 cylinders        # 磁头255 柱面2324  每磁道扇区数63(这是平均数)
    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: 0x00000000
    

    Units=255×63×512=16065×512=8225280

    磁盘大小=255*63*2324*512=19115550720= 19.11555072GB,不用1024算,用1000算。

    2.删减旧的大谬不然分区表

    # 在parted交互作用式分区工具中推行

    (parted) rm 1
    

    注意:分区表用parted工具删除后不可能直接动用fdisk实行分区

     

    1. df -h 展现各分区磁盘空间使用状态:

    5.3 分区

    分区是为了在逻辑中将某个柱面隔离形成边界。它是以柱面为单位来划分的,首先划卓越圈柱面,然后不断向内划分。

    出于读写越外圈磁道中的数据比越内圈更加快,所以率先个分区在读写品质上比后边的分区更加好。在Windows操作系统上,C盘的速度是最快的,越前边的区越慢正是其意气风发原因。

    在磁盘数据量比一点都不小的图景下,划分分区的功利是扫描块位图等更急速:不用再扫描整块磁盘的块位图,只需扫描对应分区的块位图。

    3.运用parted工具复苏以前平常的分区表

    # 在parted交互作用式分区工具中实行

    (parted) unit s                                                           
    (parted) rescue 103 1099GB
    

    这里依据此前的分区开首地方确认是103扇区,由于parted工具私下认可运行、停止地点单位都以用体量单位即kB/MB/GB,所以需求通过unit s命令定义默许使用sectors定义起首扇区。 

    完全的操作如下:

    [root@aliyunsrv ~]# parted /dev/vdb
    GNU Parted 2.1
    Using /dev/vdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) p                       # 打印分区表                                                              
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 1100GB                # 分区容量
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos                # 分区表类型
    
    Number  Start  End     Size    Type     File system  Flags
     1      5120B  1100GB  1099GB  primary      # 当前的分区表信息,是不可用的
    
    (parted) rm 1                     # 删除1号分区
    (parted) unit s                    # 使用扇区号                                                          
    (parted) rescue 103 1099GB               # 恢复分区表                                            
    Information: A ext4 primary partition was found at 2048s -> 1048575999s.  Do you want to add it
    to the partition table?            # 找到了ext4格式的分区,起始扇区定位到2048,结束扇区是1048575999(推测的,如有问题欢迎指正)  
    Yes/No/Cancel? y                # 是否要创建该分区表,也就是恢复旧的分区表                                                              
    (parted) p                                                                                       
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 2147483648s
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start  End          Size         Type     File system  Flags
     1      2048s  1048575999s  1048573952s  primary  ext4    # 可以看到这个是正确的磁盘分区表
    
    (parted) q                                                                
    Information: You may need to update /etc/fstab. 
    

     

     

    Filesystem      Size  Used Avail Use% Mounted on

    5.3.1 分区方法(MBLX570和GPT)

    MB本田CR-V格式的磁盘中,会珍爱磁盘第八个扇区——MBEvoque扇区,在该扇区中第446字节之后的64字节是分区表,每一种分区占用16字节,所以节制了一块磁盘最八只可以有4个主分区(Primary,P),倘诺多于4个区,只可以将主分区少于4个,通过树立扩足够区(Extend,E),然后在扩展分区创设逻辑分区(Logical,L)的措施来突破4个分区的限量。

    在Linux中,MB福睿斯格式的磁盘主分区号从1-4,扩大分区号从2-4,逻辑分区号从5-15,也正是最大面积是十七个分区。

    比如说,一块盘想分成6个分区,能够:

    1P 5L:sda1 sda5 sda6 sda7 sda8 sda9

    2P 4L:sda1 sda2 sda5 sda6 sda7 sda8

    3P 3L:sda1 sda2 sda3 sda5 sda6 sda7

    而GPT格式突破了MBTiguan的限量,它不再约束只好存款和储蓄4个分区表条款,而是利用了看似MBLX570增添分区表条约标格式,它同意有1贰二十个主分区,那也使得它能够对超过2TB的磁盘实行分区。

    4.重复创制新的分区表

    那边要求留意的是parted工具里END的值,由于磁盘的扇区数量不便于鲜明,能够采纳容积来顶替

    [root@aliyunsrv ~]# parted /dev/vdb
    GNU Parted 2.1
    Using /dev/vdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) p                                                                
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 1100GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End    Size   Type     File system  Flags
     1      1049kB  537GB  537GB  primary  ext4          # 重新打开后发现分区表的显示格式有变化,但并不影响,同时也可以看出来是以前的分区表(未扩容前)
    
    (parted) rm 1                            # 删除旧的分区表
    (parted) p                                                  
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 1100GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start  End  Size  Type  File system  Flags
    
    (parted) unit s
    (parted) mkpart primary ext4 2048 1099GB            # 创建新的分区表,注意要使用前文获取的扇区起始位置2048
    (parted) p                                                                
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 2147483648s
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start  End          Size         Type     File system  Flags
     1      2048s  2146484223s  2146482176s  primary  ext4   # 新的分区表
    
    (parted) q
    Information: You may need to update /etc/fstab.                           
    

    那时候新的分区表就创办成功了,要求专心:是使用的parted工具创立的分区表!!!

    假设想接受fdisk进行分区,能够在fdisk中运用2048开首扇区实行测验,注意数据备份!!!

    [root@aliyunsrv ~]# e2fsck -f /dev/vdb1 
    e2fsck 1.41.12 (17-May-2010)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    /dev/vdb1: 237246/32768000 files (75.3% non-contiguous), 112383325/131071744 blocks
    

    能够健康施行检查文件系统的操作

    [root@aliyunsrv ~]# resize2fs /dev/vdb1 
    resize2fs 1.41.12 (17-May-2010)
    Resizing the filesystem on /dev/vdb1 to 268310272 (4k) blocks.
    The filesystem on /dev/vdb1 is now 268310272 blocks long.
    

    能够通常实践确认退换文件系统大小的操作,试行完就可以挂在采取

    末尾动用工具检查分区表状态,供参谋

    [root@aliyunsrv ~]# parted /dev/vdb     
    GNU Parted 2.1
    Using /dev/vdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) p                                                                
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 1100GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type     File system  Flags
     1      1049kB  1099GB  1099GB  primary  ext4
    

    fdisk工具查看的音讯

    [root@aliyunsrv ~]# fdisk -l
    
    Disk /dev/vda: 53.7 GB, 53687091200 bytes
    255 heads, 63 sectors/track, 6527 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: 0x00078f9c
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1        6527    52426752   83  Linux
    
    Disk /dev/vdb: 1099.5 GB, 1099511627776 bytes
    255 heads, 63 sectors/track, 133674 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: 0x000ead8a
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/vdb1               1      133613  1073241088   83  Linux
    

    屈居提供赞助基友的小说链接:

    截至,呵呵呵呵

    扩大体积分三步
    1) 扩大体积实体云硬盘大小

    /dev/vda1        50G  6.0G  41G  13% /

    5.3.2 MB福睿斯和GPT分区表新闻

    在MB卡宴格式分区表中,MBLX570扇区据有5十二个字节,前4四十八个字节是主教导记录,即boot loader。中间64字节记录着分区表新闻,各类主分区新闻占用16字节,因而最四只好有4个主分区,末了2个字节是立见功效标志位。若是利用扩展分区,则扩张分区对应的16字节记下的是指向扩充足区中扩展分区表的指针。

    新葡亰496net 7

    在MB奥迪Q3磁盘上,分区和开发银行音信是保存在一起的,倘若那风姿罗曼蒂克部分数目被遮住或破坏,只可以重新建立MB路虎极光。而GPT在漫天磁盘上保留多少个那某个音信的别本,由此它更是健壮,并能够回复被破坏的那生机勃勃部分消息。GPT还为那个音讯保存了循环冗余校验码(CRC)以管教其完整和不错,如若数额被磨损,GPT会发掘那一个破坏,并从磁盘上的其他地点进行回复。

    下边是GPT格式的分区表新闻,大约大概攻下十四个字节。

    新葡亰496net 8

    EFI部分能够分为4个区域:EFI消息区(GPT头)、分区表、GPT分区区域和备份区域。

    • EFI音信区(GPT头):最早于磁盘的LBA1,经常也只占用那么些单后生可畏扇区。其效果是定义分区表的任务和尺寸。GPT头还包括头和分区表的校验和,那样就可以及时开采错误。
    • 分区表:分区表区域包蕴分区表项。那几个区域由GPT头定义,平日占用磁盘LBA2~LBA33扇区,每扇区可存款和储蓄4个主分区的分区音讯,所以共能分1贰拾五个主分区。分区表中的每一个分区项由初步地址、甘休地址、类型值、名字、属性标识、GUID值组成。分区表创立后,1二十六人的GUID对系统来说是唯生龙活虎的。
    • GPT分区:最大的区域,由分配给分区的扇区组成。这几个区域的开场和了结地址由GPT头定义。
    • 备份区:备份区域位于磁盘的尾巴部分,包含GPT头和分区表的备份。它占用GPT甘休扇区和EFI停止扇区之间的三拾一个扇区。个中最终一个扇区用来备份1号扇区的EFI消息,别的的三十几个扇区用来备份LBA2~LBA33扇区的分区表。

    2) 扩大体积分区

    /dev/vdb1      296G  272G  8.7G  97% /sda

    5.3.3 增添磁盘

    常规情状下,增多磁盘后供给重启系统工夫被内核识别,在/dev/下才有对应的设施号,使用fdisk -l才交易会示出来。可是有时不便利重启,所以上边介绍意气风发种磁盘热插拔形式。越多热插和热拔方法见自身的另风姿洒脱篇文章:Linux上磁盘热插拔。

    [root@node1 ~]# ls /sys/class/scsi_host/  # 查看主机scsi总线号
    host0  host1  host2
    

    重新扫描scsi总线以热插拔格局增加新设备。

    [root@node1 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
    [root@node1 ~]# echo "- - -" > /sys/class/scsi_host/host1/scan
    [root@node1 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan
    [root@node1 ~]# fdisk -l      # 再查看就有了
    

    如果scsi_host目录系比超多hostN目录,则选取循环来完结。

    [root@xuexi scsi_host]# ls /sys/class/scsi_host/
    host0   host11  host14  host17  host2   host22  host25  host28  host30  host4  host7
    host1   host12  host15  host18  host20  host23  host26  host29  host31  host5  host8
    host10  host13  host16  host19  host21  host24  host27  host3   host32  host6  host9
    
    [root@xuexi scsi_host]# for i in `ls /sys/class/scsi_host/`;do echo "- - -" > /sys/class/scsi_host/$i/scan;done
    

    规定文件系统一分配区表方式
    扩大体积分区
    3) 扩大体积文件系统

    4.  fdisk /dev/vdb1 对绸缪操作的磁盘进行预查看,现身以下报告急察方信息:

    5.3.4 使用fdisk分区工具

    fdisk工具用来分MB安德拉磁盘上的区。要分GPT磁盘上的区,能够运用gdisk。parted工具对那二种格式的磁盘分区都扶植。

    假诺多个存款和储蓄设备已经分过区,那么它或者是mbr格式的,也只怕是gpt格式的,假如已然是mbr格式的,则一定要三番四遍选用fdisk实行分区,就算已然是gpt格式的,则只可以动用gdisk举行分区。当然,无论什么样格式的都得以使用parted举办分区,只不过也只好分开和已存在分区格式同样的分区,因为无论何种格式的分区,它的分区表和分区标记是曾经定位的。

    选取fdisk分区,它一定要促成MB路虎极光格式的分区。

    [root@xuexi ~]# fdisk /dev/sdb   # sdb后没加数字
    Command (m for help): m          # 输入m查看可用命令帮助
    Command action                  
       a   toggle a bootable flag
       b   edit bsd disklabel
       c   toggle the dos compatibility flag
       d   delete a partition        # 删除分区,如果删除扩展分区同时会删除里面的逻辑分区
       l   list known partition types # 列出分区类型
       m   print this menu           # 显示帮助信息
       n   add a new partition       # 创建新分区
       o   create a new empty DOS partition table
       p   print the partition table      # 输出分区信息
       q   quit without saving changes    # 不保存退出
       s   create a new empty Sun disklabel
       t   change a partition's system id  # 修改分区类型
       u   change display/entry units
       v   verify the partition table
       w   write table to disk and exit    # 保存分区信息并退出
       x   extra functionality (experts only)
    

    新建第二个主分区:

    Command (m for help): n                   # 添加分区
    Command action
       e   extended                           # 添加扩展分区
       p   primary partition (1-4)            # 添加主分区
    p                                         # 输入p来创建第一个主分区
    Partition number (1-4): 1                 # 输入分区号,从1开始
    First cylinder (1-1305, default 1):     # 输入柱面号,不输人默认是1
    Using default value 1
    Last cylinder,  cylinders or  size{K,M,G} (1-1305, default 1305):  2G  # 给第一个主分区/dev/sdb1分2G,也可以使用柱面号来指定大小。
    Command (m for help): p     # 第一个分区结束,p查看下已分区信息
    
    Disk /dev/sdb: 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: 0x2d8d64eb
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1         262     2104483   83  Linux
    

    新建扩大分区:

    Command (m for help): n      # 再建一个分区
    Command action
       e   extended
       p   primary partition (1-4)
    e      # 创建扩展分区
    Partition number (1-4): 2     # 扩展分区号为2
    First cylinder (263-1305, default 263):
    Using default value 263
    Last cylinder,  cylinders or  size{K,M,G} (263-1305, default 1305): # 剩余空间全部给扩展分区
    Using default value 1305
    Command (m for help): p 
    Disk /dev/sdb: 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: 0x2d8d64eb
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1         262     2104483   83  Linux
    /dev/sdb2             263        1305     8377897    5  Extended
    

    新建扩大分区:

    Command (m for help): n         # 新建逻辑分区
    Command action
       l   logical (5 or over)      # 这里不再是扩展分区标识e,只有l。
                 # 如果已有3个主分区,这里连l都没有
       p   primary partition (1-4)
    l            # 新建逻辑分区
    First cylinder (263-1305, default 263):      # 这里也不能选逻辑分区号了
    Using default value 263
    Last cylinder,  cylinders or  size{K,M,G} (263-1305, default 1305):  3G
    Command (m for help): p
    Disk /dev/sdb: 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: 0x2d8d64eb
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1         262     2104483   83  Linux
    /dev/sdb2             263        1305     8377897    5  Extended
    /dev/sdb5             263         655     3156741   83  Linux
    

    分区甘休,保存。倘诺不保留,则按q。

    Command (m for help): w  
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    

    分区的长河,实质上是分开柱面以致改进分区表。

    地点的fdisk操作全是在内存中试行的,必需保留生效。保存后,内核还没识别该分区,能够查阅/proc/partition目录下存在的文件,那几个文件是能被内核识别的分区。运转partprobe或partx命令重新读取分区表让内核识别新的分区,内核识别后才方可格式化。何况分区甘休时按w保存分区表有时候会败北,提醒重启,那时运营partprobe命令能够代表重启就一蹴而就。

    [root@xuexi ~]# partprobe         # 执行partprobe,下面一堆信息,不理它
    Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).  As a result, it may not reflect all of your changes until after reboot.
    Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
    Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
    Error: Invalid partition table - recursive partition on /dev/sr0.
    

    也可钦定在/dev/sdb上海重机厂加载分区表,省的力不胜任读取正忙的/dev/sda磁盘,给出上面一批消息。

     [root@xuexi ~]# partprobe /dev/sdb
    

    分区之后再采用fdisk -l查看新的分区状态。

    将地点分区所需求接受的授命总括如下,未来福利使用脚本分区。

    • s   fdisk /dev/sdb  # 接受要分区的设备
    • n  # 创立分区
    • p/e/l # 选取分区类型

    假设主分区数有3个,且早就分开了扩展分区,再持续分区时将只好分开逻辑分区,这种状态下l选项会直接跳过踏入下一个品级。

    • s   N  # 钦点分区号
    • n  # 钦赐起首柱面号,使用暗许值就间接回车即换行
    • N  # 内定分区大小为N
    • w   # 分区终止保存退出
    • partprobe /dev/sdb &>/dev/null # 重读分区表
    • fdisk -l | grep "^/dev/sdb"  &>/dev/null # 检查分区状态

     

    Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

    5.3.5 使用gdisk分区工具

    gdisk用来划分gpt分区,需求单独安装那一个工具包。

    shell> yum -y install gdisk
    

    分区的时候平素带上设备就能够。以下是对新硬盘划分gpt分区的进度。

    [root@xuexi ~]# gdisk /dev/sdb
    GPT fdisk (gdisk) version 0.8.10
    
    Partition table scan:
      MBR: not present
      BSD: not present
      APM: not present
      GPT: not present
    
    Creating new GPT entries.
    
    Command (? for help): ?
    b       back up GPT data to a file
    c       change a partition's name
    d       delete a partition                               # 删除分区
    i       show detailed information on a partition         # 列出分区详细信息
    l       list known partition types                       # 列出所以已知的分区类型
    n       add a new partition                              # 添加新分区
    o       create a new empty GUID partition table (GPT)    # 创建一个新的空的guid分区表
    p       print the partition table                        # 输出分区表信息
    q       quit without saving changes                      # 退出gdisk工具
    r       recovery and transformation options (experts only) 
    s       sort partitions                                
    t       change a partition's type code                   # 修改分区类型
    v       verify disk
    w       write table to disk and exit                     # 将分区信息写入到磁盘
    x       extra functionality (experts only)             
    ?       print this menu
    

    新葡亰496net,累计叁个新分区。

    Command (? for help): n   
    Partition number (1-128, default 1):
    First sector (34-41943006, default = 2048) or { -}size{KMGTP}:
    Last sector (2048-41943006, default = 41943006) or { -}size{KMGTP}:  10G
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300):
    Changed type of partition to 'Linux filesystem'
    
    Command (? for help): p
    Disk /dev/sdb: 41943040 sectors, 20.0 GiB
    Logical sector size: 512 bytes
    Disk identifier (GUID): F8AE925F-515F-4807-92ED-4109D0827191
    Partition table holds up to 128 entries
    First usable sector is 34, last usable sector is 41943006
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 20971453 sectors (10.0 GiB)
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1            2048        20973567   10.0 GiB    8300  Linux filesystem
    
    Command (? for help): i   # 查看分区详细信息
    Using 1
    Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
    Partition unique GUID: B2452103-4F32-4B60-AEF7-4BA42B7BF089
    First sector: 2048 (at 1024.0 KiB)
    Last sector: 20973567 (at 10.0 GiB)
    Partition size: 20971520 sectors (10.0 GiB)
    Attribute flags: 0000000000000000
    Partition name: 'Linux filesystem'
    

    保留分区表到磁盘。

    Command (? for help): w 
    
    Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
    PARTITIONS!!
    
    Do you want to proceed? (Y/N): Y
    OK; writing new GUID partition table (GPT) to /dev/sdb.
    The operation has completed successfully.
    

    执行partprobe重新读取分区表音讯。

    [root@server2 ~]# partprobe  /dev/sdb
    

    gdisk还应该有多少个expert only的一声令下,其实没什么行家不专家可用的,大家要求驾驭的是命令何时能用,它们的作用是什么?

    在gdisk人机联作进度命令行下,按下x表示步入扩大作用格局,该形式下的效果与利益大部分都和gpt分区表相关,在不是格外了然gpt分区表结构的时候不建议做改革动作,可是查看消息类是没难题的。以下是扩韩锋能方式下的授命。

    Command (? for help): x
    
    Expert command (? for help): ?
    a       set attributes
    c       change partition GUID
    d       display the sector alignment value
    e       relocate backup data structures to the end of the disk
    g       change disk GUID
    h       recompute CHS values in protective/hybrid MBR
    i       show detailed information on a partition
    l       set the sector alignment value
    m       return to main menu
    n       create a new protective MBR
    o       print protective MBR data
    p       print the partition table
    q       quit without saving changes
    r       recovery and transformation options (experts only)
    s       resize partition table    # 修改分区表大小,注意不是分区大小
    t       transpose two partition table entries
    u       Replicate partition table on new device  # 将分区表导出
    v       verify disk
    w       write table to disk and exit
    z       zap (destroy) GPT data structures and exit     # 损毁gpt上的数据
    ?       print this menu 
    

    Building a new DOS disklabel with disk identifier 0x744ad656.

    5.3.6 使用parted分区工具

    parted协助mbr格式和gpt格式的磁盘分区。它的精锐在于可以一步到位而无需不停的交互作用式输入(也得以人机联作式)。

    parted分区工具是实时的,所以每一步操作都以一贯写入磁盘实际不是写进内部存款和储蓄器,它不像fdisk/gdisk还亟需w命令将内部存款和储蓄器中的结果保存到磁盘中。

    [root@xuexi ~]# parted /dev/sdc
    GNU Parted 2.1
    Using /dev/sdc
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    
    (parted) help                                                             
      align-check TYPE N                      check partition N for TYPE(min|opt) alignment
      check NUMBER                            do a simple check on the file system(centos 7上已删除该功能)
      cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER  copy file system to another partition(centos 7上已删除该功能)
      help [COMMAND]                          print general help, or help on COMMAND
      mklabel,mktable LABEL-TYPE              create a new disklabel (partition table)
      mkfs NUMBER FS-TYPE                     make a FS-TYPE file system on partition NUMBER (centos 7上已删除改该功能) 
      mkpart PART-TYPE [FS-TYPE] START END    make a partition
      mkpartfs PART-TYPE FS-TYPE START END    make a partition with a file system(centos 7上已删除该功能)   
      move NUMBER START END                   move partition NUMBER(centos 7上已删除该功能) 
      name NUMBER NAME                        name partition NUMBER as NAME
      print [devices|free|list,all|NUMBER]    display the partition table,available devices,free space, all found partitions,or a particular partition
      quit                                    exit program
      rescue START END                        rescue a lost partition near START and END
      resize NUMBER START END                 resize partition NUMBER and its file system(修改分区大小(centos 7上已删除该功能))
      rm NUMBER                               delete partition NUMBER (删除分区)             
      select DEVICE                           choose the device to edit (重选磁盘进入parted状态)  
      set NUMBER FLAG STATE                   change the FLAG on partition NUMBER(设置分区状态,如将其off或on)  
      toggle [NUMBER [FLAG]]                  toggle the state of FLAG on partition NUMBER(修改文件系统类型,如swap、lvm)  
      unit UNIT                               set the default unit to UNIT(修改默认单位,kB/MB/GB等)
      version                                 display the version number and copyright information of GNU Parted
    

    常用的通令是mklabel/rm/print/mkpart/help/quit,至于parted中部分看起来很好的职能如mkfs/mkpartfs/resize等大概会损毁当前数码而非常不够安全,所以生机勃勃旦利用它的5个常用命令就能够。

    parted分区的前提是磁盘已经有分区表(partition table)或磁盘标签(disk label),不然将显示"unrecognised disk label",那是和fdisk/gdisk差异的地点,所以供给先选择mklabel制造标签或分区表,最普遍的竹签(分区表)为"msdos"和"gpt",当中msdos分区正是MBPRADO格式的分区表,也正是会有主分区、扩丰裕区和逻辑分区的定义和范围。

    上边选取parted对/dev/sdc创造msdos的新分区。

    [root@xuexi ~]# parted /dev/sdc
    GNU Parted 2.1
    Using /dev/sdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) mklabel             # 创建磁盘分区标签(分区表类型)                                               
    New disk label type? msdos   # 选择msdos即MBR类型    
                                 # 上面的两步也可以直接一步进行:(parted) mklabel msdos      
    (parted) mkpart              # 开始进行分区     
    Partition type?  primary/extended? p     # 创建主分区
    File system type?  [ext2]? ext4          # 创建ext4文件系统
                                             # (注意,这里虽然指明了文件系统,但没有任何意义,后面还是需要手动格式化并选择文件系统类型)
    Start? 1                                 # 分区开始位置,默认是M为单位,表示从1M开始,也可直接指定1G这种方式
    End? 1024                                # 分区结束位置,1024-1=1023M
    
    (parted) p                   # print,查看分区信息
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdc: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type     File system  Flags
     1      1049kB  1024MB  1023MB  primary
    
    # 可以一步完成一个命令中的多个动作
    (parted) mkpart p ext4 1026M 4096M       # 可以一步完成,也可以一步完成到任何位置,然后继续交互下一步
                                             # 可能会提示分区未对齐"Warning: The resulting partition is not properly aligned for best performance.",忽略它
    (parted) mkpart e 4098 -1    # 创建扩展分区,注意创建扩展分区时不指定文件系统类型;-1表示剩余的全部分配给该分区
    
    (parted) p                                                               
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdc: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos 
    
    Number  Start   End     Size    Type      File system  Flags
     1      1049kB  1024MB  1023MB  primary
     2      1026MB  4096MB  3070MB  primary
     3      4098MB  21.5GB  17.4GB  extended               lba
    
    (parted) mkpart l ext4 4099 8194     # 创建逻辑分区,指定ext4
    (parted) mkpart l ext4 8195 -1       # 继续创建逻辑分区
    (parted) p
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdc: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type      File system  Flags
     1      1049kB  1024MB  1023MB  primary
     2      1026MB  4096MB  3070MB  primary
     3      4098MB  21.5GB  17.4GB  extended               lba
     5      4099MB  8194MB  4095MB  logical
     6      8195MB  21.5GB  13.3GB  logical
    
    (parted) rm 5    # 删除5号分区
    (parted) p
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdc: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type      File system  Flags
     1      1049kB  1024MB  1023MB  primary
     2      1026MB  4096MB  3070MB  primary
     3      4098MB  21.5GB  17.4GB  extended               lba
     5      8195MB  21.5GB  13.3GB  logical
    
    (parted) quit                                    # 退出parted工具
    Information: You may need to update /etc/fstab.  # 提示你要更新/etc/fstab中的配置,说明该工具是可以在线分区的
    

    mkfs和mkpartfs等一声令下不周密,下边的警告新闻已经交付了晋升。

    (parted) mkfs 1                                                          
    
    WARNING: you are attempting to use parted to operate on (mkfs) a file system.
    parted's file system manipulation code is not as robust as what you'll find in
    dedicated, file-system-specific packages like e2fsprogs.  We recommend
    you use parted only to manipulate partition tables, whenever possible.
    Support for performing most operations on most types of file systems
    will be removed in an upcoming release.
    Warning: The existing file system will be destroyed and all data on the partition will be lost. Do you want to
    continue?
    parted: invalid token: 1
    Yes/No? n
    

    采用parted工具进行的分区不供给运转partprobe重新读取分区表,内核会即时识别已经分区的分区音讯。如下所示。

    [root@xuexi tmp]# cat /proc/partitions  | grep "sdc"
       8       32   20971520 sdc
       8       33     999424 sdc1
       8       34    2998272 sdc2
       8       35         1  sdc3
       8       37   12967936 sdc5
    

    必然要留意,尽管parted工具中内定了文件系统,但是并不曾意思,它仍亟需手动实行格式化并点名分区类型。实际上,在parted粤语件系统是足以毫不钦定的,固然是非交互作用方式下也得以回顾。

     

    Changes will remain in memory only, until you decide to write them.

    5.3.7 fdisk/gdisk以致parted非交互作用式操作分区

    利用非交互作用分区时,最重大的是待分的区的起先点不可能是已接纳的。能够运用lsblk或fdisk -l或parted DEV print来剖断将要从哪些地方开端分区。其实parted在非人机联作分区是最佳的工具,不仅仅是因为其书写方式不难,何况待分区的起源如不合理它会自动唤醒是不是要自行调度。

    GPT分区云硬盘扩大容积
    umount 挂载点
    parted [磁盘路线]
    e2fsck -f /dev/vdb1
    resize2fs /dev/vdb1
    mount 分区路径 挂载点

    After that, of course, the previous content won't be recoverable.

    5.3.7.1 parted达成非人机联作

    parted命令只可以一遍非人机联作二个限令中的全体动作。如下所示:

    parted /dev/sdb mklabel msdos                 # 设置硬盘flag
    parted /dev/sdb mkpart primary ext4 1 1000    # Mbr格式分区,分别是partition type/fstype/start/end
    parted /dev/sdb mkpart 1 ext4 1M 10240M       # gpt格式分区,分别是name/fstype/start/end
    parted /dev/sdb mkpart 1 10G 15G              # 省略fstype的交互式分区
    parted /dev/sdb rm 1                          # 删除分区
    parted /dev/sdb p                             # 输出信息
    

    如若不分明分区的起源大小,能够加多-s选项使用script格局,该形式下parted将回应全体私下认可值,如yes、no。

    shell> parted -s /dev/sdb mkpart 3 14G 16G
    Warning: You requested a partition from 14.0GB to 16.0GB.                
    The closest location we can manage is 15.0GB to 16.0GB.
    Is this still acceptable to you?
    Information: You may need to update /etc/fstab.
    
    # 具体命令
    umount -lf /data
    parted /dev/vdb 
    e2fsck -f /dev/vdb1
    resize2fs /dev/vdb1
    mount /dev/vdb1  /data
    或
    echo "/dev/vdb  /data  ext4  defaults,noatime,nodiratime   0 0" >>/etc/fstab
    mount -a
    

    Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

    5.3.7.2 fdisk实现非人机联作

    fdisk落成非人机联作的规律是从规范输入中读取,每读取黄金年代行传递一次操作。

    所以能够有二种办法:使用echo和管道传递;将操作写入到文件中,从文件中读取。

    诸如:上面包车型地铁一声令下创设了多少个分区。使用暗中认可值时传递空行就能够。

    echo -e "nnpn1nn 5Gnnnpn2nn 1Gnwn"  | fdisk /dev/sdb
    

    要是要传递的操作比很多,则能够将它们写入到三个文件中,从文件中读取。

    echo -e "nnpn1nn 5Gnnnpn2nn 1Gnwn" >/tmp/a.txt
    fdisk /dev/sdb </tmp/a.txt
    

     

    1. 怎么消除上述难点?

    5.3.7.3 gdisk达成非交互作用

    原理同fdisk。例如:

    echo -e "nn1nn 3GnnwnYn" | gdisk /dev/sdb
    

    地点传递的各参数意义为:新建分区,分区number为1,使用暗中认可伊始扇区地方,分区大小 3G,使用默许分区类型,保存,确认。

     

    快到了十六点自己才发觉上面就是个逗逼的提示音讯!!

    5.4 格式化分区

    分区结束后就必要格式化创立文件系统了,格式化分区的进程正是开创文件系统的经过。能够行使mkfs(make filesystem)工具进行格式化,也足以动用该工具亲族的别样工具如mkfs.ext4/mkfs.xfs等特地针对文件系统的工具。

    要查阅支持的文件系统类型,只需轻巧的输入mkfs然后按两下tab键,就足以列出各文件系统对应的格式化命令,这个正是支撑的文件系统类型。

    CentOS 6上支撑的:

    [root@xuexi ~]# mkfs
    mkfs      mkfs.cramfs   mkfs.ext2     mkfs.ext3     mkfs.ext4     mkfs.ext4dev  mkfs.msdos    mkfs.vfat     
    

    CentOS 7上支撑的:

    [root@server2 ~]# mkfs
    mkfs      mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.fat     mkfs.minix   mkfs.msdos   mkfs.vfat    mkfs.xfs
    

     

    妈蛋,面对着mongodb数据盘空间不足的最首要关头,生怕被地点的提示消息一鼓捣,笔者的服务器今后失去mongo日志了!

    5.4.1 mkfs工具

    mkfs [-t fstype] 分区
    

    该工具特别轻易,它只需点名二个可选的"-t"选项钦命要开创的文件系统类型,假设轻松则暗中同意创设ext2文件系统。该工具钦赐的"-t"选项其实是在调用对应文件系统专门项指标格式化学工业具。

    新空间增到原来就有分区中(GPT分区格式)

    令人不安了一中午,才反应过来就是个逗逼的提示消息,吓得笔者半死!!

    5.4.2 mke2fs工具

    mkfs.ext2/mkfs.ext3/mkfs.ext4或mkfs -t extX其实都以在调用mke2fs工具。

    该工具成立文件系统时,会从/etc/mke2fs.conf配置中读取默许的配置项。

    mke2fs [ -c ] [ -b block-size ] [ -f fragment-size ] [ -g blocks-per-group ] [ -G number-of-groups ] 
           [ -i bytes-per-inode ] [ -I inode-size ] [ -j ] [ -N number-of-inodes ] [ -m reserved-blocks-percentage ] 
           [ -q ] [ -r fs-revision-level ] [ -v ] [ -L volume-label ] [ -S ] [ -t fs-type ] device [ blocks-count ]
    
    选项说明:
    -t fs-type         :指定要创建的文件系统类型(ext2,ext3 ext4),若不指定,则从/etc/mke2fs.conf中获取默认的文件系统类型。
    -b block-size      :指定每个block的大小,有效值有1024、2048和4096,单位是字节。
    -I inode-size      :指定inode大小,单位为字节。必须为2的幂次方,且大于等于128字节。值越大,说明inode的集合体inode table占用越多的空
                         间,这不仅会挤占文件系统中的可用空间,还会降低性能,因为要扫描inode table需要消耗更多时间,但是在linux kernel 2.6.10
                         之后,由于使用inode存储了很多扩展的额外属性,所以128字节已经不够用了,因此ext4默认的inode size已经变为256,尽管
                         inode大小增大了,但因为使用inode存储扩展属性带来的性能提升远高于inode size变大导致的负面影响,所以仍建议使用256字
                         节的inode。
    -i bytes-per-inode :指定每多少个字节就为其分配一个inode号。值越大,说明一个文件系统中分配的inode号越少,更适用于存储大量大文件,值越
                         小,inode号越多,更适用于存储大量小文件。该值不能小于一个block的大小,因为这样会造成inode多余。
                         注意,创建文件系统后该值就不能再改变了。
    -c                 :创建文件系统前先检查设备是否有bad blocks。
    -f fragment-size   :指定fragments的大小,单位字节。
    -g blocks-per-group:指定每个块组中的block数量。不建议修改此项。
    -G number-of-groups:该选项用于ext4文件系统(严格地说是启用了flex_bg特性),指定虚拟块组(即一个extent)中包含的块组个数,必须为2的幂次方。
                         对于ext4文件系统来说,使用extent的功能能极大提升其性能。
    -j                 :创建带有日志功能的文件系统,即ext3。如果要指定关于日志方面的设置,在-j的基础上再使用-J指定,不过一般默认即可,具体可
                         指定的选项看man文档。 
    -L new-volume-label:指定卷标名称,名称不得超出16字节。
    -m reserved-blocks-percentage:指定文件系统保留block数量的比例,保留一部分block,可以降低物理碎片。默认比例为5%。
    -N number-of-inodes :强制指定该文件系统应该分配多少个inode号,它会覆盖通过计算得出inode数量的结果(根据block大小、数量和每多少字节分配
                          一个inode得出Inode数量),但是不建议这么做。
    -q                  :安静模式,可用于脚本中
    -S                  :重建superblock和group descriptions。在所有的superblock和备份的superblock都损坏时有用。它会重新初始化superblock和
                          group descriptions,但不会改变inode table、bmap和imap(若真的改变,该分区数据就全丢了,还不如重新格式化)。在重建
                          superblock后,应该执行e2fsck来保证文件系统的一致性。但要注意,应该完全正确地指定block的大小,其改选项并不能完全保
                          证数据不丢失。
    -v                  :输出详细执行过程 
    

    由此,有十分的大大概用到的选项也就"-t"钦赐文件系统类型,"-b"内定block大小,"-I"钦定inode大小,"-i"钦点分配inode的比重。

    例如:

    shell> mke2fs -t ext4 -I 256 /dev/sdb2 -b 4096
    mke2fs 1.41.12 (17-May-2010)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    655360 inodes, 2621440 blocks
    131072 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=2684354560
    80 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
    
    Writing inode tables: done                           
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    This filesystem will be automatically checked every 39 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    

    升迁使用tune2fs修改自动物检疫验文件系统的频率。见下文。

    查看数据盘音信

    添补: 重启ecs实例后,希图扩大体积磁盘。结果发掘又走到老路上了: fdisk /dev/vdb1。小编干嘛老喜欢加上vdb1呢?那又形成小编怎么开改正分区都是先前相似的大小。笔者都差不离要给Ali云打电话了!!

    万幸,终于试着敲了二回 fdisk /dev/vdb ,然后 d , n , p ,1 初步扩大容积。

    前些天运作 resize2fs /dev/vdb1 ,结果提醒必需运转 e2fsck -f /dev/vdb1 (正是怕因为300G的日记招致那豆蔻年华进度),所以生怕地敲了下去。最后resize2fs /dev/vdb1,然后df开采一只大好。

    增加补充: 详细经过为: fdisk /dev/vdb 然后输入(d,n,p,1),然后五次回车,最终(wq)保存,那样就创设了四个新分区并且动用了最大的磁盘体积。fdisk -l 查看一下。然后e2fsck -f /dev/vdb1,完成后选择 resize2fs /dev/vdb1。再度 fdisk -l 查看,然后 mount /dev/vdb1 /sda,df -h 看见新的扩大容积后的多少盘变大了!

    1. click server 系统自运转redis server十分, ../init.d/redis-server 有标题? 小编不得不奉行 redis-server /etc/redis/redis.conf 才可以确定保证使用了配备文件,不然未有动用布署文件.

    匪夷所思如下命令准确与否:

    if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS

    1. mongodb 关闭应该团结手动调用命令只怕下述外号关闭,确定保障数据不甩掉。并不是让系统去关闭。

    alias mongostop='mongo admin --eval "db.shutdownServer()"'

    1. jms 服务器关闭能够在jms admin输入shutdown关闭。

    5.4.3 tune2fs改过ext文件系统属性

    该工具其实没什么太大功用,文件系统制造好后比相当多性质是固定不能够改改的,能改改的属性很有限,且都是不屑后生可畏顾的。

    但有个别时候仍可以用到它做些工作,譬如刚创建完ext文件系统后会提醒纠正自检时间。

    tune2fs [  -c  max-mount-counts ] [ -i interval-between-checks ] [ -j ] device
    -j:将ext2文件系统升级为ext3;
    -c:修改文件系统最多挂载多少次后进行自检,设置为0或-1将永不自检;
    -i:修改过了多少时间进行自检。时间单位可以指定为天(默认)/月/星期[d|m|w],设置为0将永不自检。
    

    例如:tune2fs -i 0 /dev/sdb1

    实施命令

    5.5 查看文件系统状态新闻

    parted 磁盘路线 print

    5.5.1 lsblk

    lsblk(list block devices)用于列出设备及其状态,主要列出非空的存款和储蓄设备。其实它只会列出/sys/dev/block中的主次设备号文件,且默许只列出非空设备。

    [root@server2 ~]# lsblk 
    

    新葡亰496net 9

    中间地方的几列意义如下:

    NAME:设备名称;

    MAJ:MIN:主设备号和此设备号;

    RM:是或不是为可卸载设备,1象征可卸载设备。可卸载设备如光盘、USB等。并非可以umount的正是可卸载的;

    SIZE:设备总空间尺寸;

    RO:是或不是为只读;

    TYPE:是磁盘disk,照旧分区part,亦恐怕rom,还也许有loop设备;

    mountpoint:挂载点。

    [root@server2 ~]# lsblk /dev/sdb
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdb      8:16   0   20G  0 disk
    ├─sdb1   8:17   0  9.5G  0 part /mydata/data
    └─sdb2   8:18   0    3G  0 part
    
    [root@server2 ~]# lsblk /dev/sdb1
    NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdb1   8:17   0  9.5G  0 part /mydata/data
    

    除此以外常用的三个抉择是"-f",它能够查见到文件系统类型,和文件系统的uuid和挂载点。

    [root@xuexi ~]# lsblk -f
    NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
    sda                                                     
    ├─sda1 ext4         77b5f0da-b0f9-4054-9902-c6cdacf29f5e /boot
    ├─sda2 ext4         f199fcb4-fb06-4bf5-a1b7-a15af0f7cb47 /
    └─sda3 swap         6ae3975c-1a2a-46e3-87f3-d5bd3f1eff48 [SWAP]
    sr0                                                     
    sdb                                                      
    ├─sdb1 ext4         95e5b9d5-be78-43ed-a06a-97fd1de9a3fe
    ├─sdb2 ext2         45da2d94-190a-4548-85bb-b3c46ae6d9a7
    └─sdb3                          
    

    每一种已经格式化的文件系统都有其种类和uuid,而未有格式化的装置(如/dev/sdb3),将只呈现一个Name结果,表示该器具尚未举行格式化。

    确认云硬盘的容积变化。如在进程中收到如下指示,请输入Fix:

    5.5.2 blkid

    尽管它有过多相比较强硬的效能,但平时只用它一个效应,正是查看器文件系统类型和uuid。

    [root@xuexi ~]# blkid
    /dev/sda1: UUID="77b5f0da-b0f9-4054-9902-c6cdacf29f5e" TYPE="ext4"
    /dev/sda2: UUID="f199fcb4-fb06-4bf5-a1b7-a15af0f7cb47" TYPE="ext4"
    /dev/sda3: UUID="6ae3975c-1a2a-46e3-87f3-d5bd3f1eff48" TYPE="swap"
    /dev/sdb1: UUID="95e5b9d5-be78-43ed-a06a-97fd1de9a3fe" TYPE="ext4"
    /dev/sdb2: UUID="45da2d94-190a-4548-85bb-b3c46ae6d9a7" TYPE="ext2"
    
    [root@xuexi ~]# blkid /dev/sdb1
    /dev/sdb1: UUID="95e5b9d5-be78-43ed-a06a-97fd1de9a3fe" TYPE="ext4"
    

     新葡亰496net 10

    5.5.3 parted /dev/sda print和fdisk -l

    shell> parted /dev/sdb p
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:
    
    Number  Start   End     Size    File system  Name              Flags
     1      1049kB  10.2GB  10.2GB  ext4
     2      10.2GB  13.5GB  3221MB  ext2         Linux filesystem
    
    shell> fdisk -l /dev/sda
    Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 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 label type: dos
    Disk identifier: 0x000cb657
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048      514047      256000   83  Linux
    /dev/sda2          514048    37847039    18666496   83  Linux
    /dev/sda3        37847040    41943039     2048000   82  Linux swap / Solaris
    

    固然如此fdisk和gdisk分别是mbr和gpt格式的专项使用工具,然而仅用于查看新闻依然得以的。parted能宽容两者,所以也足以。

    新葡亰496net 11

    5.5.4 file -s

    [root@xuexi ~]# file -s /dev/sdb2
    /dev/sdb2: Linux rev 1.0 ext2 filesystem data (large files)
    

    那边扩大体积后的云硬盘大小为107GB,本来就有分区的轻重缓急为10.7GB。

    5.5.5 du

    du命令用于评估文件的空间吞噬意况,它会计算每一种文件的轻重,总括时会递归计算目录中的文件,也正是说,它会遍历整个待总结目录,所以总计速度上也许并不优良。

    du [OPTION]... [FILE]...
    选项说明:
    -a, --all:列出目录中所有文件的统计信息,默认只会列出目录中子目录的统计信息,而不列出文件的统计信息
    -h, --human-readable:人性化显示大小
    -0, --null:以空字符结尾,即""而非换行的"n"
    -S, --separate-dirs:不包含子目录的大小
    -s, --summarize:对目录做总的统计,不列出目录内文件的大小信息
    -c,--total:对给出的文件或目录做总计。在统计非同一个目录文件大小时非常有用。见下文例子。
    --max-depth=N:只列出给定层次的目录统计,如果N=0,则等价于"-s"
    -x, --one-file-system:忽略不同文件系统上的文件,不对它们进行统计
    -X, --exclude-from=FILE:从文件中读取要排除的文件
    --exclude=PATTERN:指定要忽略不统计的文件
    

    注意:

    (1).上边包车型大巴选项中,有个别是不列出一点项,有些是不总括有个别项,它们是非常的小器晚成致的。

    (2).如若要总括的目录下挂载了四个文件系统,那么那么些文件系统的尺寸也会被计入该目录的尺寸中。

    [root@xuexi ~]# du -sh /etc
    29M     /etc
    
    [root@xuexi ~]# du -ah /tmp
    4.0K    /tmp/b.txt
    4.0K    /tmp/a
    4.0K    /tmp/.ICE-unix
    4.0K    /tmp/testdir/subdir
    0       /tmp/testdir/a.log
    8.0K    /tmp/testdir
    24K     /tmp
    
    [root@xuexi ~]# du -h --max-depth=1 /usr
    15M     /usr/include
    383M    /usr/lib64
    132K    /usr/local
    391M    /usr/share
    4.0K    /usr/etc
    118M    /usr/lib
    44M     /usr/libexec
    49M     /usr/src
    32M     /usr/sbin
    4.0K    /usr/games
    75M     /usr/bin
    1.1G    /usr
    
    [root@xuexi ~]# du -h --max-depth=1 --exclude=/usr/lib64 /usr
    15M     /usr/include
    132K    /usr/local
    391M    /usr/share
    4.0K    /usr/etc
    118M    /usr/lib
    44M     /usr/libexec
    49M     /usr/src
    32M     /usr/sbin
    4.0K    /usr/games
    75M     /usr/bin
    721M    /usr
    

    搜寻相符条件的文书,然后计算它们的总大小。结合find使用,效果极佳。

    [root@xuexi ~]# find /boot/ -type f -name "*.img" -print0 | xargs -0 du -ch
    28K     /boot/grub2/i386-pc/core.img
    4.0K    /boot/grub2/i386-pc/boot.img
    592K    /boot/initrd-plymouth.img
    44M     /boot/initramfs-0-rescue-d13bce5e247540a5b5886f2bf8aabb35.img
    17M     /boot/initramfs-3.10.0-327.el7.x86_64.img
    16M     /boot/initramfs-3.10.0-327.el7.x86_64kdump.img
    76M     total
    

    请留神"-c"和"-s"总括的不一致。

    [root@xuexi ~]# find /boot/ -type f -name "*.img" -print0 | xargs -0 du -sh
    28K     /boot/grub2/i386-pc/core.img
    4.0K    /boot/grub2/i386-pc/boot.img
    592K    /boot/initrd-plymouth.img
    44M     /boot/initramfs-0-rescue-d13bce5e247540a5b5886f2bf8aabb35.img
    17M     /boot/initramfs-3.10.0-327.el7.x86_64.img
    16M     /boot/initramfs-3.10.0-327.el7.x86_64kdump.img
    

     

    5.5.6 df

    df用于报告磁盘空间使用率,暗许显示的高低是1K大小block数量,也正是以k为单位。

    和du分裂的是,df是读取各种文件系统的superblock音信,所以评估速度非常的慢。由于是读取superblock,所以如若目录下挂载了另一个文件系统,是不会将此挂载的文件系计算入目录大小的。

    假如用df计算有个别文件的空中应用状态,将会转而计算该文件所在文件系统的上空利用情形。

    df [OPTION]... [FILE]...
    选项说明:
    -h:人性化转换大小的显示单位
    -i:统计inode使用情况而非空间使用情况
    -l, --local:只列出本地文件系统的使用情况,不列出网络文件系统信息
    -T, --print-type:同时输出文件系统类型
    -t, --type=TYPE:只列出给定文件系统的统计信息
    -x, --exclude-type=TYPE:指定不显示的文件系统类型的统计信息
    

    示例:

    [root@server2 ~]# df -hT
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/sda2      xfs        18G  2.3G   16G  13% /
    devtmpfs       devtmpfs  904M     0  904M   0% /dev
    tmpfs          tmpfs     913M     0  913M   0% /dev/shm
    tmpfs          tmpfs     913M  8.6M  904M   1% /run
    tmpfs          tmpfs     913M     0  913M   0% /sys/fs/cgroup
    /dev/sda1      xfs       247M  110M  137M  45% /boot
    tmpfs          tmpfs     183M     0  183M   0% /run/user/0
    /dev/sdb1      ext4      9.3G   37M  8.8G   1% /mydata/data
    
    [root@server2 ~]# df -i
    Filesystem       Inodes  IUsed    IFree IUse% Mounted on
    /dev/sda2      18666496 106474 18560022    1% /
    devtmpfs         231218    388   230830    1% /dev
    tmpfs            233586      1   233585    1% /dev/shm
    tmpfs            233586    479   233107    1% /run
    tmpfs            233586     13   233573    1% /sys/fs/cgroup
    /dev/sda1        256000    330   255670    1% /boot
    tmpfs            233586      1   233585    1% /run/user/0
    /dev/sdb1        625856     14   625842    1% /mydata/data
    

     

    5.5.7 dumpe2fs

    用于查看ext类文件系统的superblock及块组音信。使用-h选项将只突显superblock新闻。

    以下是ext4文件系统superblock的新闻。

    [root@xuexi ~]# dumpe2fs -h /dev/sda2
    dumpe2fs 1.41.12 (17-May-2010)
    Filesystem volume name:   <none>
    Last mounted on:          /
    Filesystem UUID:          f199fcb4-fb06-4bf5-a1b7-a15af0f7cb47
    Filesystem magic number:  0xEF53
    Filesystem revision #:    1 (dynamic)
    Filesystem featurs:      has_journal ext_attr resize_inode dir_index filetype needs_recovery exent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
    Filesystem flags:         signed_directory_hash
    Default mount options:    user_xattr acl
    Filesystem state:         clean
    Errors behavior:          Continue
    Filesystem OS type:       Linux
    Inode count:              1166880
    Block count:              4666624
    Reserved block count:     233331
    Free blocks:              4196335
    Free inodes:              1111754
    First block:              0
    Block size:               4096
    Fragment size:            4096
    Reserved GDT blocks:      1022
    Blocks per group:         32768
    Fragments per group:      32768
    Inodes per group:         8160
    Inode blocks per group:   510
    Flex block group size:    16
    Filesystem created:       Sat Feb 25 11:48:47 2017
    Last mount time:          Tue Jun  6 18:13:10 2017
    Last write time:          Sat Feb 25 11:53:49 2017
    Mount count:              6
    Maximum mount count:      -1
    Last checked:             Sat Feb 25 11:48:47 2017
    Check interval:           0 (<none>)
    Lifetime writes:          2657 MB
    Reserved blocks uid:      0 (user root)
    Reserved blocks gid:      0 (group root)
    First inode:              11
    Inode size:               256
    Required extra isize:     28
    Desired extra isize:      28
    Journal inode:            8
    Default directory hash:   half_md4
    Directory Hash Seed:      d4e6493a-09ef-41a1-9d66-4020922f1aa9
    Journal backup:           inode blocks
    Journal features:         journal_incompat_revoke
    Journal size:             128M
    Journal length:           32768
    Journal sequence:         0x00001bd9
    Journal start:            23358
    

    此中三个块组消息。

    [root@xuexi ~]# dumpe2fs /dev/sda2 | tail -7
    dumpe2fs 1.41.12 (17-May-2010)
    Group 142: (Blocks 4653056-4666623) [INODE_UNINIT, ITABLE_ZEROED]
      Checksum 0x64ce, unused inodes 8160
      Block bitmap at 4194318 ( 4294508558), Inode bitmap at 4194334 ( 4294508574)
      Inode table at 4201476-4201985 ( 4294515716)
      13568 free blocks, 8160 free inodes, 0 directories, 8160 unused inodes
      Free blocks: 4653056-4666623
      Free inodes: 1158721-1166880
    

    卸载已挂载数据盘

    5.6 挂载和卸载文件系统

    在那,只简要介绍mount和umount的用法,至于完成挂载和卸载的体制和规律细节,参看挂载文件系统的底细。

    施行以下命令确认该云硬盘是或不是还大概有分区已挂载:

    5.6.1 mount

    mount用来体现挂载消息如故拓宽文件系统挂载,它的效劳及其的苍劲(强盛到不可靠),它不光扶持挂载非常多样文件系统,如ext/xfs/nfs/smbfs/cifs (win上的分享目录)等,还辅助分享挂载点、世袭挂载点(父子关系)、绑定挂载点、移动挂载点等等功用。在本文只介绍其最简易的挂载成效。

    昨今不一样的文件系统挂载选项是全数差别的,在挂载进程中倘使出错,应该man mount并查六柱预测应文件系统的挂载选项。

    mount实际不是只好挂载文件系统,也得以将引得挂载到另一个目录下,其实它实现的是目录"硬链接",暗中认可景况下,是力不能及对目录创立硬链接的,不过透过mount能够成功绑定,绑定后八个目录的inode号是完全相近的,但就算建设构造的是目录的"硬链接",但事实上也仅是拿来当软链接用。

    以下是ext类文件系统的选项,也可能有一些选项是不扶植任何文件系统的。

    mount # 将显示当前已挂载信息
    mount [-t 欲挂载文件系统类型 ] [-o 特殊选项] 设备名 挂载目录
    
    选项说明:
    -a  将/etc/fstab文件里指定的挂载选项重新挂载一遍。
    -t  支持ext2/ext3/ext4/vfat/fat/iso9660(光盘默认格式)。 不用-t时默认会调用blkid来获取文件系统类型。
    -n  不把挂载记录写在/etc/mtab文件中,一般挂载会在/proc/mounts中记录下挂载信息,然后同步到/etc/mtab,指定-n表示不同步该挂载信息。
    -o  指定挂载特殊选项。下面是两个比较常用的:
        loop  挂载镜像文件,如iso文件
        ro  只读挂载
        rw  读写挂载
        auto  相当于mount -a
        dev 如果挂载的文件系统中有设备访问入口则启用它,使其可以作为设备访问入口
        default rw,suid,dev,exec,auto,nouser,async,and relatime
        async   异步挂载,只写到内存
        sync    同步挂载,通过挂载位置写入对方硬盘
        atime   修改访问时间,每次访问都修改atime会导致性能降低,所以默认是noatime
        noatime 不修改访问时间,高并发时使用这个选项可以减少磁盘IO
        nodiratime  不修改文件夹访问时间,高并发时使用这个选项可以减少磁盘IO
        exec/noexec  挂载后的文件系统里的可执行程序是否可执行,默认是可以执行exec, 优先级高于权限的限定
        remount  重新挂载,此时可以不用指定挂载点。
        suid/nosuid 对挂载的文件系统启用或禁用suid,对于外来设备最好禁用suid
        _netdev 需要网络挂载时默认将停留在挂载界面直到加载网络了。使用_netdev可以忽略网络正常挂载。如NFS开机挂载。
        user  允许普通用户进行挂载该目录,但只允许挂载者进行卸载该目录
        users  允许所有用户挂载和卸载该目录
        nouser  禁止普通用户挂载和卸载该目录,这是默认的,默认情况下一个目录不指定user/users时,将只有root能挂载
    

    相近user/users/nouser都用在/etc/fstab中,直接在命令行下使用那多少个选项意义不是非常的大。

    例如:

    (1).挂载CentOS的设置镜像到/mnt。

    mount /dev/cdrom /mnt
    

    事实上/dev/cdrom是/dev/sr0的一个软链接,/dev/sr0是光驱设备,所以也能够用/dev/sr0进行挂载。

    mount /dev/sr0 /mnt
    

    (2).重新挂载。

    [root@xuexi ~]# mount -t ext4 -o remount /dev/sdb1 /data1
    

    (3).重新挂载文件系统为可读写。

    mount -t ext4 -o rw remount /dev/sdb1 /data1
    

    (4).挂载windows的分享目录。

    win上分享文件的文件系统是cifs类型,要在Linux上挂载,必需得有mount.cifs命令,若无则设置cifs-utils包。

    设若win上分享目录的unc路线为\192.168.100.8test,分享给的客商名和密码分别为long3:123,要挂在linux上的/mydata目录上。

    shell> mount.cifs -o username="long3",password="123" //192.168.100.8/test /mydata
    

    (5).挂载目录到另二个目录下。挂载目录时,挂载目录和挂载点的inode是形似的,它们两者的开始和结果也是完全相符的。

    mount --bind /mydata /mnt
    

    (6).查看有些目录是不是是挂载点,使用mountpoint命令

    [root@xuexi ~]# mountpoint /mydata/
    /mydata/ is a mountpoint
    
    [root@xuexi ~]# echo $?           
    0
    
    [root@xuexi ~]# mountpoint /mnt
    /mnt is not a mountpoint
    
    [root@xuexi ~]# echo $?       
    1
    

    挂载的参数音讯贮存在/proc/mounts(是/proc/self/mounts的软链接)中,在/proc/self/mountstats和/proc/mountinfo里则记录了更详尽的挂载新闻。

    [root@xuexi ~]# cat /proc/mounts
    rootfs / rootfs rw 0 0
    proc /proc proc rw,relatime 0 0
    sysfs /sys sysfs rw,relatime 0 0
    devtmpfs /dev devtmpfs rw,relatime,size=491000k,nr_inodes=122750,mode=755 0 0
    devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
    tmpfs /dev/shm tmpfs rw,relatime 0 0
    /dev/sda2 / ext4 rw,relatime,barrier=1,data=ordered 0 0
    /proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
    /dev/sda1 /boot ext4 rw,relatime,barrier=1,data=ordered 0 0
    none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
    

    文件系统是内需驱动扶持的,未有驱动的文件系统也不能够挂载,Linux中协助的文件系统驱动在/lib/modules/$(uname -r)/kernel/fs下。

    [root@xuexi ~]# ls /lib/modules/$(uname -r)/kernel/fs/
    autofs4  cachefiles  configfs  dlm       exportfs  ext3  fat      fuse  jbd   jffs2  mbcache.ko  nfs_common  nls       ubifs  xfs
    btrfs    cifs        cramfs    ecryptfs  ext2      ext4  fscache  gfs2  jbd2  lockd  nfs         nfsd        squashfs  udf
    

    mount | grep '磁盘路线'

    5.6.2 间接挂载镜像文件

    不经常必要挂载CentOS的镜像文件,在虚构机中常常是将镜像纳入虚构机的CD/DVD虚构光驱中,然后在Linux上对/dev/cdrom实行挂载。其实/dev/cdrom是/dev/sr0的一个软链接,/dev/sr0是Linux中的光驱,所以地点的进程也正是是将镜像文件通过编造软件的设想光驱和linux的光驱连接起来,那样只供给挂载Linux中的光驱就能够了。不过,在非设想境况中尚无虚构光驱,并且在Linux中的二个镜像文件难道一定要拷贝到主机上通过虚构光驱进行连接吗?

    mount是贰个最为强盛的挂载工具,它支持挂载很三种文件类型,在那之中就援助挂载镜像文件,其实它连挂载目录都援助。

    mount -o loop CentOS-6.6-x86_64-bin-DVD2.iso /mnt
    
    [root@xuexi ~]# lsblk
    NAME     MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    loop0      7:0    0   1.2G  0 loop /mnt
    sda        8:0    0    20G  0 disk
    ├─sda1   8:1    0   250M  0 part /boot
    ├─sda2   8:2    0  17.8G  0 part /
    └─sda3   8:3    0     2G  0 part [SWAP]
    sr0       11:0    1  1024M  0 rom
    

    新葡亰496net 12

    5.6.3 umount

    umount 设备名或挂载目录
    umount -lf 强制卸载
    

    卸载时,不仅可以够采纳设备名也足以选取挂载点卸载。不经常候挂载互连网种类(如NFS)时,设备名相当长,那时能够应用挂载点来卸载就有益多了。

    风流倜傥经客商正在访谈有个别目录或文件,使得卸载平昔呈现Busy,使用fuser -v DIENCORE可以通晓哪个人正在访问该目录或文件。

    [root@xuexi ~]# fuser -v /root
                         USER        PID ACCESS COMMAND
    /root:               root      37453 ..c.. bash
    

    接纳-k选项kill掉正在使用目录或文件的进度,使用-km选项kill掉文件系统上的保有过程,然后再umount。

    [root@xuexi ~]# fuser -km /mnt/cdrom;umount /mnt/cdrom
    

    此处云硬盘上有一个分区(vdb1)挂载在/data上,要求将其解挂。

    5.6.4 开机自动挂载/etc/fstab

    因此将挂载选项写入到/etc/fstab中,系统会自动挂载该公文中的配置项。但要注意,该公文在开机的前几个进度中就被读取,所以布置错误很恐怕会造成开机失败。

    新葡亰496net 13

    中间最后两列,它们各自代表备份文件系统和开机自检,常常都足以安装为0。

    是因为能用的备份工具众多,没人会在这里处安器材份,所以备份列设置为0。

    终极一列是开机自检设置列,开机自检调用的是fsck程序,全数有个别ext类文件系统作为"/"时,恐怕会设置为1,然则fsck是不扶植xfs文件系统的,所以对于xfs文件系统来说,该项必得设置为0。

    实则不需要考虑那么多,直接将这两列设置为0就能够了。

     

    5.6.5 修复错误的/etc/fstab

    万生机勃勃/etc/fstab配置错误,导致开机不能加载。当时提示输入root密码步向单人维护格局,只不过担当情势下根文件系统是只读的,哪怕是root也力所比不上直接校正/etc/fstab,所以应当将"/"文件系统实行重新挂载。

    推行下边包车型客车命令,重挂载根分区,并给读写权限,再去改善错误的fstab文件记录,再重启。

    [root@xuexi ~]# mount -n -o remount,rw /
    

     

    5.6.7 按需自行挂载(autofs)

    利用autofs达成需要挂载时就挂载,不须求挂载时5秒钟后自动卸载。不过在骨子里条件中挑明州不会选取按需挂载。

    autofs是八个服务程序,须求让其运行在后台,能够用来挂NFS,也可挂本地的文件系统。

    暗中同意不装autofs,须求和睦装。

    [root@xuexi ~]# yum install -y autofs
    

    autofs已毕按需挂载的措施是点名监控目录,可在其布局文件/etc/auto.master中钦赐。

    /etc/auto.master里面唯有两列:第一列是监督目录;第二列是记录挂载选项的文本,该文件能够随意取名。

    [root@xuexi ~]# cat /etc/auto.master
    /share  /etc/auto.mount    # 监控/share目录,使用/etc/auto.nfs记录挂载选项
    

    上述监控的/share目录,其实那是监督的父目录,在那目录下的目录如/share/data目录能够看作挂载点,当访问到/share/data时就被监察和控制到,然后会遵守挂载选项将挂载设备挂载到/share/data上。

    上述配置中安插的挂载选项文件是/etc/auto.mount,所以创设此文件,写入挂载选项。

    [root@xuexi ~]# cat /etc/auto.mount
    #cd              -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
    
    # the following entries are samples to pique your imagination
    #linux          -ro,soft,intr           ftp.example.org:/pub/linux
    #boot           -fstype=ext2            :/dev/hda1
    #floppy         -fstype=auto            :/dev/fd0
    #floppy         -fstype=ext2            :/dev/fd0
    #e2floppy       -fstype=ext2            :/dev/fd0
    #jaz            -fstype=ext2            :/dev/sdc1
    #removable      -fstype=ext2            :/dev/hdd
    

    该文件有3列:

    率先列钦命的是在/etc/auto.master钦点的/share下的目录/share/data,它是实在的被监督路线,也是挂载点。可采取相对路线data表示/share/data。

    第二列是mount的选项,前面使用一个"-"表示,该列未足轻重。

    其三列是待挂载设备,可以是NFS服务端的分享目录,也能够本地设备。

    [root@xuexi ~]# vim /etc/auto.mount
    data   -rw,bg,soft,rsize=32768,wsize=32768     192.168.100.61:/data
    

    地方的布局表示当访谈到/share/data时,自动使用参数(rw,bg,soft,rsize=32768,wsize=32768)挂载远端192.168.100.61的/data目录到/share/data上。

    剩余的步骤正是运维autofs服务。

    [root@xuexi data]# /etc/init.d/autofs restart
    

    选拔以下命令解挂:

    5.7 swap分区

    固然个人计算机上基本已经不需求安装swap分区了,不过在服务器上也许应该策动swap分区,以完结未雨希图和防止广大"玄学"难点。

    umount 挂载点
    本例中即试行umount /data举行卸载。

    5.7.1 查看swap使用情状

    [root@xuexi ~]# free
                total      used      free     shared    buffers     cached
    Mem:       1906488     349376    1557112      200     16920      200200
    -/  buffers/cache:     132256    1774232
    Swap:      2097148          0    2097148
    
    [root@xuexi ~]# free -m        # 以MB显示
                 total       used       free      shared    buffers     cached
    Mem:          1861        341       1520          0         16        195
    -/  buffers/cache:        129       1732     # 这个是真正的可用内存空间
    Swap:         2047          0       2047     # 这个是swap空间,发现一点都没被用
    

    行使mount/lsblk等足以查阅出哪位分区在充任swap分区。使用swapon -s也得以间接查看出。

    [root@server2 ~]# swapon -s
    Filename                                Type            Size    Used    Priority
    /dev/sda3                               partition       2047996 37064   -1
    

    注:要将云硬盘上装有分区的文件系统都解挂,如vdb1、vdb2......
    重新行使mount | grep '/dev/vdb'命令来认同此硬盘上具备分区的文件系统都已经解挂。

    5.7.2 添加swap分区

    (1).可以新分三个区,在分区时钦命其分区的ID号为SWAP类型。

    mbr和gpt格式的磁盘上这几个ID大概不太相似,可是貌似gpt中的格式是在mbr格式的ID后增加两位数的数值,如mbr中swap的品种ID为82,在gpt中则是8200,在mbr中linux filesystem类型的ID为83,在gpt中则为8300,在mbr中lvm的ID为8e,在gpt中为8e00。

    (2).格式化为swap分区:mkswap

    [root@xuexi ~]# mkswap /dev/sdb5
    Setting up swapspace version 1, size = 1951096 KiB
    no label, UUID=02e5af44-2a16-479d-b689-4e100af6adf5
    

    (3).加入swap分区空间(swapon):

    [root@xuexi ~]# swapon /dev/sdb5  
    
    [root@xuexi ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1861        343       1517          0         16        196
    -/  buffers/cache:        131       1730
    Swap:         3953          0       3953
    

    (4).废除swap分区空间(swapoff):

    [root@xuexi ~]# swapoff /dev/sdb5
    
    [root@xuexi ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1861        343       1518          0         16        196
    -/  buffers/cache:        130       1731
    Swap:            0          0          0
    

    (5).开机自动加载swap分区:

    改善/etc/fstab,加上生机勃勃行。

    /dev/sda3    swap    swap    defaults    0    0
    

     

    回来大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

     新葡亰496net 14

    转发请评释出处:http://www.cnblogs.com/f-ck-need-u/p/7048971.html

    数码盘分区

    承认云硬盘全数分区均已卸载后,奉行以下命令,将原分区删除并以相同的早先偏移新建二个分区:

    parted  [磁盘路线]
    接下去输入unit s,将体现和操纵单位产生sector(默以为GB卡塔尔国,输入print来查阅分区音信,记住本来就有分区的Start值。

    剔除分区并新建后,Start值必需与这一个相仿,不然数据将会扬弃。

    新葡亰496net 15

    奉行以下命令删除原有分区:

    rm [分区Number]
    由上海体育场所可见云硬盘上有三个分区,Number号为“1”,实施rm 1,结果如下图:

    新葡亰496net 16

    输入mkpart primary [原分区开头扇区] 100%

    新建一个主分区。

    本例中使用mkpart primary 2048s 100%,此主分区从第20肆十五个扇区开端(必得与删除在此以前的分区风姿罗曼蒂克致卡塔 尔(阿拉伯语:قطر‎,百分百代表此分区到磁盘的最末尾。

    倘诺现身如图状态请输入Ignore:

    新葡亰496net 17

    双重输入print可开掘新分区已经新建设成功,输入quit,就能够退出parted工具:

    新葡亰496net 18

    自小编商量扩大容积后分区的文件系统

    动用以下命令检查扩大容积后的分区:

    e2fsck -f 分区路径
    细说步骤中本例已新建了分区1,使用e2fsck -f /dev/vdb1开展操作。结果如下:

    新葡亰496net 19

    扩大体积文件系统

    实施以下命令举办分区上文件系统的扩大体积操作:

    resize2fs 分区路径

    新葡亰496net 20

    挂载新分区

    进行以下命令挂载分区:

    mount 分区路径 挂载点
    那边通过mount /dev/vdb1 /data

    手动挂载新分区,并行使df -h命令查看,现身以下音信表达挂载成功,即能够查看见数据盘了。

    新葡亰496net 21

     

     


     

    MBLAND分区云硬盘扩大体量

     

    下边两种处境都得以采用使用自动扩大体量工具(devresize.py卡塔尔举办扩大容积
    1、原有的硬盘(数据盘卡塔尔唯有叁个MBLacrosse主分区并创设了文件系统
    2、原有的硬盘(数据盘卡塔尔未有分区,直接在那硬盘上成立了文件系统

     

    活动扩大容积工具适用于Linux操作系统,用于将扩大容积时新扩的云硬盘存款和储蓄空间加多到已存在的文件系统中,扩大体积能够成功必得满意上面3个标准:
    1、文件系统是ext2/ext3/ext4,并且独有二个主分区未有其余主分区和扩展分区
    2、当前文件系统不可能有荒诞
    3、扩大体积后的磁盘大小不超越2TB

    umount 挂载点
    wget -O /tmp/devresize.py 下载后生可畏键扩大体量工具
    python /tmp/devresize.py 硬盘路线 云硬盘,实际不是分区名
    mount 分区路径 挂载点

    # 具体命令
    umount -lf /data
    wget -O /tmp/devresize.py http://mirrors.tencentyun.com/install/virts/devresize.py 
    python /tmp/devresize.py  /dev/vdb
    mount /dev/vdb1  /data
    或
    echo "/dev/vdb  /data  ext4  defaults,noatime,nodiratime   0 0" >>/etc/fstab
    mount -a
    

     

     

    新空间增到原来就有分区中(MBLAND分区格式)

    卸载正在接受的硬盘分区

    施行以下命令卸载分区:

    umount 挂载点

    新葡亰496net 22

    下载后生可畏键扩大体积工具

    执行以下命令下载工具:

    wget -O /tmp/devresize.py
    实践扩大体量工具

    施行以下命令实行扩大体积:

    python /tmp/devresize.py 硬盘路线
    请留神,这里硬盘路线是内需扩大体积的云硬盘,并不是分区名。若你的文件系统在vdb1上,则应实施

    python /tmp/devresize.py /dev/vdb

    新葡亰496net 23

    若输出“The filesystem on /dev/vdb1 is now XXXXX blocks long.“则意味着扩大体积成功。

    双重挂载扩大体量后的分区

    试行以下命令挂载扩大容积后的分区:

    mount 分区路径 挂载点
    并由此以下命令查看扩大体量后的分区体积:

    df -h
    那边透过mount /dev/vdb1 /data命令手动挂载扩大体量后的分区(要是原先是从未分区的,试行mount /dev/vdb /data),

    用df -h命令查看,现身以下新闻认证挂载成功,即能够查阅到数据盘了:

    新葡亰496net 24

    再实施ll /data命令,可以查阅到,扩大体积后原分区的多少尚未错过,新增的仓库储存空间已经扩容到文件系统中。

     

     

    devresize.py

    #!/usr/bin/env python
    # coding: utf-8
    # FileName: devresize.py
    """
    It only handle the following two situations:
    1. There is only one primary partiion in the disk with a format of ext2/3/4;
    2. The disk is raw with a file system whose format is ext2/3/4.
    """
    
    import struct
    import array
    import fcntl
    import time
    import sys
    import os
    import glob
    import logging
    
    BLKSSZGET = 0x1268
    BLKGETSIZE = 0x1260
    BLKRRPART = 0x125f
    BLKGETSIZE64 = 0x80041272
    
    logger = None
    
    
    def read_ub(data):
        return struct.unpack('B', data[0])[0]
    
    
    def read_us(data):
        return struct.unpack('<H', data[0:2])[0]
    
    
    def read_ui(data):
        return struct.unpack('<I', data[0:4])[0]
    
    
    def read_ul(data):
        return struct.unpack('<Q', data[0:8])[0]
    
    
    def init_log():
        global logger
        log_file = 'devresize.log'
        fmt_file = '%(asctime)s - [%(levelname)-5.5s]- %(filename)s:%(lineno)s - %(message)s'
        fmt_stream = '[%(levelname)s] - %(message)s'
        logger = logging.getLogger('devresize')
        logger.setLevel(logging.DEBUG)
    
        file_handler = logging.FileHandler(log_file)
        file_handler.setLevel(logging.DEBUG)
        file_handler.setFormatter(logging.Formatter(fmt_file))
        logger.addHandler(file_handler)
    
        stream_handler = logging.StreamHandler()
        stream_handler.setLevel(logging.INFO)
        stream_handler.setFormatter(logging.Formatter(fmt_stream))
        logger.addHandler(stream_handler)
    
    
    class PartitionEntry(object):
        PartitionTypes = {
            0x05: "Microsoft Extended",
            0x83: "Linux",
            0x85: "Linux Extended"
        }
    
        def __init__(self, data):
            self.data = data
            self.boot_sig = data[0]
    
            self.start_head, self.start_sector, self.start_cylinder = (
                PartitionEntry.get_hsc(data[1:1   3]))
    
            self.partition_type = read_ub(data[4])
    
            self.end_head, self.end_sector, self.end_cylinder = (
                PartitionEntry.get_hsc(data[5:5   3]))
    
            self.start_lba = read_ui(data[8:8   4])
            self.sector_num = read_ui(data[12:12   4])
    
            self.partition_type_name = PartitionEntry.PartitionTypes.get(self.partition_type, "other")
    
        @staticmethod
        def get_hsc(data):
            h, s, c = struct.unpack('BBB', data[0:3])
            c = (c | ((s & 0xC0) << 2))
            s = (s & 0x3F)
            return h, s, c
    
        @staticmethod
        def cal_hsc(sector, hh, ss):
            s = sector % ss   1
            sector /= ss
            h = sector % hh
            sector /= hh
            c = sector & 0xFF
            s |= (sector >> 2) & 0xC0
            return h, s, c
    
        def vaild_type(self):
            return self.partition_type in self.PartitionTypes
    
        def isprimary(self):
            return self.partition_type == 0x83
    
        def __str__(self):
            if not self.vaild_type():
                print "%x" % self.partition_type
                return "This isn't a Linux Partition!"
            return """
            Start h,s,c: %u %u %u
            End h,s,c: %u %u %u
            Partition Type Name:%s
            Start LBA: %u
            Sector Number: %u
            """ % (self.start_head, self.start_sector, self.start_cylinder,
                   self.end_head, self.end_sector, self.end_cylinder,
                   self.partition_type_name, self.start_lba, self.sector_num)
    
    
    class MBR(object):
        def __init__(self, data):
            self.data = data
            self.boot_code = data[:446]
            self.mbr_sig = data[510:512]
    
            if self.check_mbr_sig():
                self.partitions = ([PartitionEntry(data[446   16 * i:446   16 * (i   1)])
                                    for i in range(0, 4)])
            else:
                self.partitions = None
    
            if self.partitions is not None:
                self.vaild_part_num = len(filter(lambda x: x.vaild_type(), self.partitions))
            else:
                self.vaild_part_num = 0
    
            self.device_heads = 0
            self.device_sectors = 0
    
            self.cal_device_hs()
    
        def cal_device_hs(self):
            if self.partitions is not None and self.vaild_part_num == 1:
                self.device_heads = self.partitions[0].end_head   1
                self.device_sectors = self.partitions[0].end_sector & 0x3F
    
        def check_mbr_sig(self):
            mbr_sig = read_us(self.mbr_sig)
            if mbr_sig == 0xAA55:
                return True
            else:
                return False
    
    
    def get_device_size(fd):
        buf = array.array('c', [chr(0)] * 8)
        fcntl.ioctl(fd, BLKSSZGET, buf, True)
        logical_sector_size = read_ul(buf)
    
        buf = array.array('c', [chr(0)] * 8)
        try:
            fcntl.ioctl(fd, BLKGETSIZE, buf, True)
            device_size = read_ul(buf) * 512
        except IOError:
            fcntl.ioctl(fd, BLKGETSIZE64, buf, True)
            device_size = read_ul(buf)
        device_sector_number = device_size / logical_sector_size
        logger.debug(
            '''device_size:%d
            device_sector_number:%d
            logical_sector_size:%d''' % (device_size, device_sector_number, logical_sector_size))
        return device_size, device_sector_number, logical_sector_size
    
    
    def backup_mbr(data):
        bak_name = '/tmp/MBR_%s_bak' % time.strftime("%Y-%m-%d_%X", time.localtime())
        bak_file = open(bak_name, 'w')
        bak_file.write(data)
        bak_file.close()
        logger.info("Backup MBR to %s" % bak_name)
        return bak_name
    
    
    def is_first_start():
        bak_file_list = glob.glob('/tmp/MBR_%s*bak' % time.strftime("%Y-%m-%d", time.localtime()))
        return len(bak_file_list) == 0
    
    
    def cal_new_part(part_data, mbr, start_lab, new_end):
        device_heads, device_sectors = mbr.device_heads, mbr.device_sectors
    
        new_partition_sector_num = new_end - start_lab   1
        begin_h, begin_s, begin_c = PartitionEntry.cal_hsc(start_lab, device_heads, device_sectors)
        end_h, end_s, end_c = PartitionEntry.cal_hsc(new_end, device_heads, device_sectors)
    
        new_part_data = list(part_data[:])
        new_part_data[1:1   3] = list(struct.pack('BBB', begin_h, begin_s, begin_c))
        new_part_data[5:5   3] = list(struct.pack('BBB', end_h, end_s, end_c))
        new_part_data[0xc:] = list(
            struct.pack('BBBB', (new_partition_sector_num & 0xff), ((new_partition_sector_num >> 8) & 0xff),
                        ((new_partition_sector_num >> 16) & 0xff), ((new_partition_sector_num >> 24) & 0xff)))
    
        logger.debug("""
        Start h,s,c: %u %u %u
        End h,s,c: %u %u %u
        Partition Type Name:%s
        Start LBA: %u
        Sector Number: %u
        """ % (begin_h, begin_s, begin_c,
               end_h, end_s, end_c,
               mbr.partitions[0].partition_type_name,
               mbr.partitions[0].start_lba,
               new_partition_sector_num))
        return new_part_data
    
    
    # filesystem type must be ext2/3/4
    def check_format(dev):
        blkid_ret = os.popen('blkid %s' % dev)
        s = blkid_ret.read()
        if blkid_ret.close() is not None:
            return False
        return True in [i in s for i in ['ext2', 'ext3', 'ext4']]
    
    
    def part_probe(fd):
        logger.debug('part_probe')
        fd.flush()
        fcntl.ioctl(fd, BLKRRPART)
    
    
    def resize2fs(dev):
        ret = os.system('e2fsck -f %s' % dev)
        logger.debug('e2fsck ret is %d' % ret)
        if ret not in (0, 1):
            raise RuntimeError('e2fsck failed!!')
        if ret == 1:
            logger.info('File system errors corrected')
    
        ret = os.system('resize2fs %s' % dev)
        logger.debug('resize2fs ret is %d' % ret)
        if ret != 0:
            raise RuntimeError('resize2fs failed!!')
    
    
    def check_mount(target_dev):  # target_dev is mounted!
        return os.system('mount | grep "%s " > /dev/null' % target_dev) == 0
    
    
    def write_mbr(fd, mbr_data):
        fd.seek(0)
        fd.write(mbr_data)
        part_probe(fd)
        fd.close()
        time.sleep(1)
    
    
    def check_arg(device):
        return not device[-1].isdigit()
    
    
    def get_disk_path(partation_name):
        for i, ch in enumerate(os.path.basename(partation_name)[::-1]):
            if not ch.isdigit():
                return partation_name[::-1][i::][::-1]
        logger.error("invalid para %s" % partation_name)
        raise Exception("invalid para %s" % partation_name)
    
    
    def main():
        if len(sys.argv) < 2:
            print "Usage: %s block_device" % sys.argv[0]
            sys.exit(1)
    
        init_log()
        logger.debug("user input:%s" % ' '.join(sys.argv))
        device = sys.argv[1]
    
        if not check_arg(device):
            logger.error("The argument should be a whole disk not a partation!like %s" % get_disk_path(device))
            sys.exit(1)
    
        if not os.access(device, os.W_OK):
            logger.error("Permission denied")
            sys.exit(1)
    
        fd = open(device, 'r ')
    
        data = fd.read(512)
        mbr = MBR(data)
    
        device_size, device_sector_number, logical_sector_size = get_device_size(fd)
    
        if mbr.vaild_part_num > 1:
            logger.error("Disk %s have multi partition." % device)
            sys.exit(1)
    
        target_partition = ''
        resize_part_flag = True
    
        if mbr.vaild_part_num == 1:  # only one partition, which is the primary partition
            if not mbr.partitions[0].isprimary():  # and the filesystem type is ext2/3/4.
                logger.error("Must be primary partition.")
            resize_part_flag = True
            if device[-1].isdigit():
                target_partition = device   'p1'  # ex: /dev/nbd0 -> /dev/nbd0p1
            else:
                target_partition = device   '1'  # ex: /dev/vdb -> /dev/vdb1
            logger.debug(mbr.partitions[0])
    
        if mbr.vaild_part_num == 0:  # no partition but whole disk is ext2/3/4
            resize_part_flag = False
            target_partition = device
    
        logger.debug('target_partition:%s' % target_partition)
    
        if not check_format(target_partition):
            logger.error("Only can process ext2/3/4.")
            sys.exit(1)
    
        if check_mount(target_partition):
            logger.error("Target device %s must be unmounted." % target_partition)
            sys.exit(1)
    
        logger.info("It will resize (%s).n"
                    "This operation may take from several minutes to several hours, continue? [Y/n]"
                    % target_partition)
        user_input = raw_input()
    
        if user_input.lower() != 'y' and user_input != '':
            logger.warn("User input neither 'y' nor '[Enter]',exit.")
            sys.exit(1)
    
        if not is_first_start():
            logger.warn('We find some MBR backup file in /tmp,maybe the MBR is already changed,'
                        'do you want to just resize the filesystem? [Y/n]')
            user_input = raw_input()
            if user_input.lower() == 'y' or user_input == '':
                resize_part_flag = False
    
        if resize_part_flag:
            logger.debug("Begin to change the partation")
            if (mbr.partitions[0].start_lba   mbr.partitions[0].sector_num) == device_sector_number:
                logger.error("No free sectors available.")
                sys.exit(1)
            if mbr.partitions[0].sector_num > 0xFFFFFFFF * 512 / logical_sector_size:
                logger.error("Can't process the partition which have exceeded 2TB.")
                sys.exit(1)
            new_start_sector = mbr.partitions[0].start_lba
            new_end_sector = device_sector_number - 1
            if (new_end_sector - new_start_sector   1) * logical_sector_size > 0xFFFFFFFF * 512:
                user_input = raw_input("The size of this disk is %.2fTB (%d bytes).n"
                                       "But DOS partition table format can not be used on drives for volumes larger than 2TB (2199023255040 bytes).n"
                                       "Do you want to resize (%s) to 2TB?[Y/n]"
                                       % (round(device_size / 1024.0 / 1024 / 1024 / 1024, 2), device_size,
                                          target_partition))
                if user_input.lower() != 'y' and user_input != '':
                    logger.warn("User input neither 'y' nor '[Enter]',exit.")
                    sys.exit(1)
                new_end_sector = 0xFFFFFFFF * 512 / logical_sector_size   new_start_sector - 1
    
            new_mbr_data = list(data)[:]
            new_mbr_data[446:446   16] = cal_new_part(data[446:446   16], mbr,
                                                      new_start_sector, new_end_sector)
    
            backup_mbr(data)
        try:
            if resize_part_flag:
                write_mbr(fd, ''.join(new_mbr_data))
            resize2fs(target_partition)
        except Exception, e:
            logger.error(e)
            logger.error('Some error occurred!!Maybe you should call the customer service staff.')
    
    
    if __name__ == '__main__':
        main()
    

     

     

     


    Tencent云主机做raid

    都以系统层面包车型地铁raid

    windows主机

    windows2013LX5702:使用系统自带磁盘微处理器里的 ,新建镜像卷成效,把多个弹性云硬盘连接到云主机,然后新建镜像卷做raid1

    Linux主机

    centos6:Linux内核提供了md模块在尾巴部分管理RAID设备,大家能够行使mdadm工具来调用md模块。安装mdadm(以CentOS为例卡塔尔

     

     

     

    f

    本文由新葡亰496net发布于电脑系统,转载请注明出处:管理文件系统,故障管理

    关键词: