给阿里云服务器新增云磁盘
[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/131/ ]
创业初期,公司选配阿里云服务器配置的时候,由于考虑不周,只配了50G的数据盘.就在昨天,由于磁盘爆满,导致网站用户无法上传图片,相关操作也就无法进行.事态紧急,只好把无关紧要的备份文件删除,先腾出点空间.接下来要做的,就是再跟阿里云买一块云磁盘.
创业初期,公司选配阿里云服务器配置的时候,由于考虑不周,只配了50G的数据盘。就在昨天,由于磁盘爆满,导致网站用户无法上传图片,相关操作也就无法进行。事态紧急,只好把无关紧要的备份文件删除,先腾出点空间。接下来要做的,就是再跟阿里云买一块云磁盘。
都知道,阿里云的云磁盘IO性能不怎么样,考虑到这一点,就先新增一块300G的云磁盘过度,以后有时间了再考虑把数据往别的地方迁移。
先简单说明一下操作思路,假设用户上传的数据存放路径为/web/uploads:
1)新增阿里云磁盘
2)mount新磁盘到/mnt上
3)同步/web/uploads的数据到/mnt
4)umount新磁盘
5)重命名/web/uploads为/web/uploads_bak
6)新建/web/uploads
7)mount新磁盘到/web/uploads上,并修改/etc/fstab
8)最后再同步/web/uploads_bak的数据到/web/uploads
5)6)7)可以写成脚本的形式进行操作
1)在阿里云控制台新增了云磁盘,等几分钟,就可以在通过如下命令查看服务器识别到的硬盘:
[root@AY /]# fdisk -l Disk /dev/xvda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x00073f45 Device Boot Start End Blocks Id System /dev/xvda1 * 1 2611 20970496 83 Linux Disk /dev/xvdb: 53.7 GB, 53687091200 bytes 224 heads, 56 sectors/track, 8359 cylinders Units = cylinders of 12544 * 512 = 6422528 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/xvdb1 1 8359 52427620 83 Linux Disk /dev/xvdc: 322.1 GB, 322122547200 bytes 255 heads, 63 sectors/track, 39162 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: 0x00000000
可以看到,新增的磁盘为/dev/xvdc,现在需要给它进行分区操作。
[root@AY /]# fdisk /dev/xvdc Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x882a692b. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help):
输入m,fdisk工具会提示相关参数的作用说明,这里我们主要是新建分区,所以输入n
Command (m for help): n Command action e extended p primary partition (1-4)
e:拓展分区
p:主分区
因为这块新增的硬盘,全部用来存储数据,创建一个分区就可以了,所以输入p,并只选择创建1个主分区,接着可以一路回车键,使用默认值。
p Partition number (1-4): 1 First cylinder (1-39162, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-39162, default 39162): Using default value 39162
最后记得输入w保存。
然后就是格式化新建的磁盘分区。这里格式化新分区的文件格式为ext4,300G的阿里云磁盘大约需要4分钟,inodes占用大约200MB的空间。
[root@AY /]# mkfs.ext4 /dev/xvdc1 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 19660800 inodes, 78642183 blocks 3932109 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 2400 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, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 26 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
2)挂载磁盘到/mnt
mount /dev/xvdc1 /mnt #挂载新硬盘到/mnt
3)接下来,就开始同步几十G的数据到新增的硬盘,由于要同步的数据比较多,所以采用rsync工具来保证数据的一致性。
rsync /web/uploads /mnt -aP #同步数据 ... sent 11272285 bytes received 893 bytes 2505150.67 bytes/sec total size is 27816370196 speedup is 2467.48
-a,--archive 归档模式,相当于-rlptgoD
-r,--recursive 对子目录以递归模式处理
-l,--links 链接文件,意思是拷贝链接文件
-p,--perms 表示保持文件原有权限
-t,--times 保持文件原有时间
-g,--group 保持文件原有用户组
-o,--owner 保持文件原有属主
-D,--devices 保持设备文件信息
注意,不要使用如下方式进行同步操作:
cd /mnt rsync /web/uploads . -aP #同步数据
这很可能是rsync的BUG,它会把数据同步到没挂载新硬盘前的/mnt上,换句话说,数据会占用根目录所在分区的磁盘空间。
4)同步完毕后卸载磁盘
umount /mnt
5)重命名/web/uploads为/web/uploads_bak
mv /web/uploads /web/uploads_bak
6)新建文件夹/web/uploads
mkdir /web/uploads
7)挂载新磁盘到/web/uploads上,并修改/etc/fstab
mount /dev/xvdc1 /web/uploads vi /etc/fstab #新增加一行,让系统重新启动时自动挂载该磁盘 /dev/xvdc1 /web/uploads ext4 defaults 0 0
8)最后再同步一遍,保证数据的一致性。
rsync /web/uploads_bak /web/uploads -aP #同步数据
我来说两句: