澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

阿里云linux数据磁盘扩容过程中经历的大问题,管

奉公守法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

腾讯云 云硬盘扩大容积

/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卡塔 尔(英语:State of Qatar) 体积最大为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。

请小心,由于MB奥迪Q5的界定,接受任何黄金年代种办法时,请保持随性所欲分区的高低不超越2TB(若你扩大容积后的空间已经超先生出2TB则不得接纳第三种办法。

Device Boot      Start        End      Blocks  Id  System

5.5 查看文件系统状态消息

由此其实能够测算出Ali云的磁盘扩大体积以来大概出难题了,在此以前分区小编写的自然是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扇区卡塔 尔(阿拉伯语:قطر‎用来存放主辅导记录(MB昂科雷),也称MB奥迪Q5扇区。多少个扇区是512字节,因而MB智跑扇区的尺寸也是512字节,其切实数据结构是:4五十几个字节的指点代码、61个字节的分区表及2个字节的签名值"55AA"。由于MB宝马X5的分区表独有62个字节,叁个分区须求16Bytes空间来囤积相关新闻,所以分区表只好存款和储蓄4个分区记录。

主分区(注意扩大分区也是一个主分区)的最大个数是四,当创立三个主分区时,就不能再次创下造扩张分区。

为了突破三个主分区的界定,越来越好规划磁盘空间大小,Linux系统引进了扩张分区的定义(形似把主分区进行剪切,衍生出二级分区表卡塔尔国。管理员能够把里面多个主分区设置为扩丰硕区(注意只好够利用二个恢弘分区)来张开扩大。扩张分区不也许直接行使,必需细分成逻辑分区才方可用来存款和储蓄数据。

MB中华V分区格式的最大分区为2TB,GPT分区尚无2TB的范围,理论上最大分区为18EB。若是要创造大于2TB的GPT分区,就不可能使用MBQX56格式的分区表,需求运用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 机械硬盘

固态硬盘由多块盘片组成,它们都绕着主轴旋转。每块盘片上下方都有读写磁头悬浮在盘片上下方,它们与盘片的偏离超小。在历次读写多少时盘片旋转,读写磁头被磁臂调整着持续的位移来读取此中的数据。

富有的盘片都以还要一齐转动,全体的磁头也是联合签名移动。

图片 1

图片 2

图片 3

磁盘在物理上划分了扇区、磁道和柱面。倘使划分了分区,则分区是逻辑上柱面包车型客车相间边界。

读写磁头在终止状态下,在盘片旋转时磁头扫过的黄金时代圈轨迹称为磁道,全数的磁道都是同心圆。从盘片外圈开头向内数,磁道号从0开端逐数扩充。

各种磁道以512字节等分为几个弧段。所以外圈磁道的扇区数比较多,内圈磁道的扇区数比较少,有个别硬盘参数上写的磁道扇区数平日用二个限量来标志,如373-768表示最外面磁道有7七十二个扇区,最内圈有3柒拾四个扇区,那就足以测算出各种磁道的字节数。

种种扇区512字节,扇区是磁盘调控器的小不点儿读写单元。Windows操作系统以"簇"为存款和储蓄单元,三个"簇"是八个扇区(能够是2、4、8...个扇区),可是读写必要发送到磁盘调控器上仍然是以扇区为单位的。之所以以"簇"为单元是因为能够适用幸免碎片使得同一个文本的数量所在的扇区现身物理间距,那样不断的位移磁头会严重低沉读写速度。

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

图片 4

旧式磁盘的构造不分区(without zones),各种磁道扇区数黄金时代致,可是种种扇区仍是512字节,也等于说磁性材质记录的0和1的数目是后生可畏律的。这种协会的弱点是外界磁道的面积大,存储的数据布满宽松,内圈磁道面积小,存款和储蓄的数据分布密集,这样就招致盘片外圈面积浪费。

摩登磁盘结构实行了分区,将每一种磁道等面积划分512字节的上空作为二个扇区,所以不一致磁道扇区数分歧。

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

图片 5

将装有盘片相像磁道数的磁道划分为柱面。和磁道号的号子形式同样,从外向内从0先河逐数增添。

进而划分柱面,是因为具有磁盘同步旋转,全数磁头同步移动,全部的磁头在自便二个时刻三番一回会出在同三个磁道同叁个扇区上。读写多少时,任意黄金时代段数据连接按柱面来读写的。所以盘片数越来越多,读写所扫的扇区数就越少,所需的时间相对就越少,质量就越好。

盘片同步旋转,转动叁个角度,外圈比内圈的线速度越来越快,磁头可以扫过的扇区数越多,因而读写越外圈磁道中的数据比越内圈越来越快。

向磁盘写多少是从外圈柱面向内圈柱面写的,独有写完一个柱面才写下叁个柱面。因而磁盘用过生机勃勃段时间后存款和储蓄东西的进程集会场全数放缓便是因为外面柱面已经用掉了。

图片 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工具苏醒从前符合规律的分区表

#阿里云linux数据磁盘扩容过程中经历的大问题,管理文件系统。 在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 分区方法(MB景逸SUV和GPT)

MBENCORE格式的磁盘中,会爱惜磁盘第八个扇区——MBMurano扇区,在该扇区中第446字节之后的64字节是分区表,各类分区占用16字节,所以限定了一块磁盘最两只能有4个主分区(Primary,P),假诺多于4个区,只好将主分区少于4个,通过创设扩大分区(Extend,E),然后在扩充足区创建逻辑分区(Logical,L)的主意来突破4个分区的约束。

在Linux中,MBWrangler格式的磁盘主分区号从1-4,扩丰硕区号从2-4,逻辑分区号从5-15,也正是最大面积是17个分区。

举例,一块盘想分成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格式突破了MBENCORE的范围,它不再限定只好存款和储蓄4个分区表条款,而是使用了就好像MBQX56扩大分区表条指标格式,它同意有1贰17个主分区,那也使得它能够对超过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 MBMurano和GPT分区表音讯

在MBQashqai格式分区表中,MBPRADO扇区攻克511个字节,前448个字节是主带领记录,即boot loader。中间64字节记录着分区表音信,各样主分区消息占用16字节,由此最四只可以有4个主分区,最终2个字节是平价标志位。假设应用增加分区,则扩张分区对应的16字节记录的是指向扩充分区中扩展分区表的指针。

图片 7

在MBHighlander磁盘上,分区和运转消息是保留在一块的,要是那部分数量被掩没或破坏,只可以重新建立MB福特Explorer。而GPT在全部磁盘上保存四个那有的新闻的副本,因而它越是强健,并得以恢复生机被损坏的那部分音信。GPT还为那几个音信保存了循环冗余校验码(CRC)以担保其全体和不易,要是数量被毁坏,GPT会发现这个破坏,并从磁盘上的其他地点进行复苏。

上面是GPT格式的分区表新闻,大概大抵占据14个字节。

图片 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工具用来分MBSportage磁盘上的区。要分GPT磁盘上的区,可以行使gdisk。parted工具对那二种格式的磁盘分区都协理。

即使叁个存款和储蓄设备已经分过区,那么它恐怕是mbr格式的,也可能是gpt格式的,假若已然是mbr格式的,则只可以接二连三行使fdisk举行分区,如果已是gpt格式的,则只可以利用gdisk进行分区。当然,无论怎么格式的都得以应用parted进行分区,只不过也必须要分开和已存在分区格式近似的分区,因为随意何种格式的分区,它的分区表和分区标识是朝气蓬勃度固定的。

应用fdisk分区,它一定要促成MBLAND格式的分区。

[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)

新建第3个主分区:

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

增进多少个新分区。

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分区正是MB奥迪Q5格式的分区表,也正是会有主分区、扩大分区和逻辑分区的概念和界定。

上面接受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 

图片 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结果,表示该装置尚未开展格式化。

阿里云linux数据磁盘扩容过程中经历的大问题,管理文件系统。认同云硬盘的体量变化。如在经过中吸收如下提示,请输入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"

 图片 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能包容两者,所以也得以。

图片 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

图片 12

5.6.3 umount

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

卸载时,既可以够行使设备名也能够动用挂载点卸载。有的时候候挂载互连网连串(如NFS)时,设备名非常长,那时可以使用挂载点来卸载就便于多了。

如若客商正在访问某些目录或文件,使得卸载一向展现Busy,使用fuser -v DI本田UR-V可以精通哪个人正在访问该目录或文件。

[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中,系统会活动挂载该文件中的配置项。但要注意,该文件在开机的前多少个经过中就被读取,所以布署错误很或许会促成开机战败。

图片 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分区

尽管个人Computer上着力已经不要求安装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

 图片 14

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

数据盘分区

确认云硬盘全体分区均已卸载后,实行以下命令,将原分区删除并以同样的初叶偏移新建二个分区:

parted  [磁盘路线]
接下去输入unit s,将展现和决定单位造成sector(默认为GB卡塔尔,输入print来查阅分区音讯,记住原来就有分区的Start值。

除去分区并新建后,Start值必需与那一个相近,不然数据将会丢弃。

图片 15

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

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

图片 16

输入mkpart primary [原分区初步扇区] 100%

新建三个主分区。

本例中使用mkpart primary 2048s 百分百,此主分区从第20四十多少个扇区初叶(必需与删除以前的分区生龙活虎致卡塔 尔(阿拉伯语:قطر‎,百分之百表示此分区到磁盘的最末尾。

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

图片 17

重新输入print可窥见新分区已经新建变成功,输入quit,就能够退出parted工具:

图片 18

检查扩大容积后分区的文件系统

应用以下命令检查扩大体积后的分区:

e2fsck -f 分区路径
前述步骤中本例已新建了分区1,使用e2fsck -f /dev/vdb1进行操作。结果如下:

图片 19

扩大容积文件系统

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

resize2fs 分区路线

图片 20

挂载新分区

举办以下命令挂载分区:

mount 分区路径 挂载点
这里通过mount /dev/vdb1 /data

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

图片 21

 

 


 

MBLX570分区云硬盘扩大体积

 

上边三种情状都得以选用选取机动扩大容积工具(devresize.py卡塔尔举行扩大体量
1、原有的硬盘(数据盘卡塔尔国唯有一个MBCRUISER主分区并创设了文件系统
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

 

 

新空间增至本来就有分区中(MB大切诺基分区格式)

卸载正在选拔的硬盘分区

进行以下命令卸载分区:

umount 挂载点

图片 22

下载大器晚成键扩大容积工具

推行以下命令下载工具:

wget -O /tmp/devresize.py
进行扩容工具

施行以下命令进行扩容:

python /tmp/devresize.py 硬盘路线
请在乎,这里硬盘路线是亟需扩大容积的云硬盘,并非分区名。若你的文件系统在vdb1上,则应推行

python /tmp/devresize.py /dev/vdb

图片 23

若输出“The filesystem on /dev/vdb1 is now XXXXX blocks long.“则象征扩容成功。

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

推行以下命令挂载扩大体积后的分区:

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

df -h
这里经过mount /dev/vdb1 /data命令手动挂载扩大容积后的分区(假使原来是从未有过分区的,实施mount /dev/vdb /data),

用df -h命令查看,现身以下消息表达挂载成功,即能够查阅到数据盘了:

图片 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()

 

 

 


腾讯云主机做raid

都以系统层面包车型客车raid

windows主机

windows二〇一一途胜2:使用系统自带磁盘微处理器里的 ,新建镜像卷成效,把三个弹性云硬盘连接到云主机,然后新建镜像卷做raid1

Linux主机

centos6:Linux内核提供了md模块在尾部管理RAID设备,大家能够选拔mdadm工具来调用md模块。安装mdadm(以CentOS为例卡塔 尔(阿拉伯语:قطر‎

 

 

 

f

本文由澳门新浦京娱乐场网站发布于澳门新浦京娱乐场网站,转载请注明出处:阿里云linux数据磁盘扩容过程中经历的大问题,管