使用dd命令转移系统和数据到新的硬盘
服务器已经经历过一次8G电子盘升级16G电子盘了,当时数据比较简单,索性直接重新安装的系统。这次16G的硬盘空间被占满了,同样重装系统后却发现配置的网址竟然不能访问。 经过两天的尝试后仍然没有解决,决定放弃重新配置,改成直接把原来硬盘上的数据复制到新的硬盘上。这时就接触到了linux的dd命令,然后把转移过程记录在这里。最终目的:将16G的原数据转移到新的64G硬盘,并且将16G以外的空间分配到根目录。
一、准备工作
准备的材料:①64G容量的新固态硬盘(实际上是咸鱼上买的二手固态,嘘~)
注意:下面是比较安全的准备材料,但是本人并没有这么做。所以对不安全情况下造成的数据损失不负任何责任。
安全的准备材料:
①正常功能的linux机器(或者安装在U盘中的linux系统)
②要转移数据的旧硬盘
③用来容纳数据的新硬盘(容量要求大于或者等于旧硬盘的容量)
然后使用任意系统将新的固态硬盘的所有分区删除,把新固态硬盘还原成还未分区的状态。在windows10上是: “此电脑右键” --> “管理” --> “磁盘管理” --> “在蓝条下的白色区域右键” --> “删除卷”。
介绍dd命令
dd命令的基本格式:dd if=/dev/sda of=/dev/sdb #dd if=代表旧硬盘的目录 of=代表新硬盘的目录 #意义是:把数据从/dev/sda复制到/dev/sdb(这种复制十分的彻底,连硬盘的分区和UUID都可以复制)
二、使用dd命令
本人是直接将新的硬盘连接到了正在运行旧硬盘上的系统的设备上。也就是直接把新硬盘插在了旧硬盘的机器上。然后打开命令行界面。(不推荐)安全的操作:(避免复制正在运行的系统导致意外的错误)
①将两块硬盘接入到正常的linux设备,然后重启设备。这时两块硬盘应该被自动临时挂载到了默认位置。
②进入正常linux设备的命令行界面
然后在命令行输入命令:
#输入: lsblk #列出所有块设备 #系统返回: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 1 55.9G 0 disk sda 8:32 0 14.8G 0 disk ├─sda1 8:33 0 1G 0 part /boot └─sda2 8:34 0 13.8G 0 part ├─centos_liusserver-root 253:0 0 12.3G 0 lvm / └─centos_liusserver-swap 253:1 0 1.5G 0 lvm [SWAP] #可以从容量看出sda共14.8g,是提到的16g容量的旧硬盘。sdb是55.9G,是64G的新硬盘。 #接下来使用dd命令转移数据 dd if=/dev/sda of=/dev/sdb #其中的sda和sdb是根据上一步lsblk命令返回的信息决定的。前一个为新硬盘,后一个是旧硬盘。不同的系统分配给的名称不同,需要具体问题具体分析。 #其实dd命令有一些参数,这里不加任何参数,比较简单,由命令自行处理。 #之后等待一段时间,直到dd命令执行完毕。等待的时间和数据量成正比,基本上以小时为单位等待。 #dd命令执行完毕后新硬盘的UUID也会和旧的一样,可以不加修改直接接入到新的设备上去。dd命令执行完毕后,会得到一个有三个分区的新硬盘:前两个分区和旧硬盘的完全一致,第三个分区是一个空分区,没有被使用。 这第三个分区的未使用空间就是需要扩容到根目录的分区。
三、新硬盘启动
接下来将操作的设备关机。拆下两块硬盘,将旧的硬盘保存下来作为数据的备份。然后将新的硬盘接入到旧硬盘所在的设备,然后开机。顺利的话,可以直接进入转移好的系统。如果不能进入系统。则关闭机器,然后重新开机,进入BIOS,选择新的硬盘作为启动盘即可。
个人在操作时遇到了如下问题:
不能进入系统,在CentOS7欢迎界面(指那个由线条组成的‘7’的界面)一段时间后,会黑屏进入一个类似命令行的界面。因为是回忆写的文章,没能记录下来界面的文字。
解决办法:个人在dd命令结束后没有进入新的系统,而直接对剩下的空闲分区进行了分区操作,导致系统路径识别错误。在任意系统上删除过早操作的第三个分区,还原成空分区后成功进入系统。
四、根目录扩容(LVM)
这部分的解决方法参考自知乎上的:Linux 扩容 / 根分区(LVM+非LVM)的“二、CentOS7,LVM根分区扩容步骤”部分。#输入: lsblk #在新硬盘的设备上查看所有块设备 #系统返回: sdc 8:32 0 55.9G 0 disk ├─sdc1 8:33 0 1G 0 part /boot └─sdc2 8:34 0 13.8G 0 part ├─centos_liusserver-root 253:0 0 12.3G 0 lvm / └─centos_liusserver-swap 253:1 0 1.5G 0 lvm [SWAP] #可以发现空间容量对不上,存在空分区。并且了解到此时的硬盘被叫做sdc。 #接下来对空分区,创建分区 fdisk /dev/sdc #写最顶层的名称然后系统会逐步返回下面图片的信息:
如上图中①和②默认如图。③是编号,这里编号选3(也就是可以默认,直接回车),其结果就是sdc3。④是分区的起始位置,括号内是范围。这里自己是填写的最小的数值。 这里需要注意,我自己进行这步时的默认数据不是最小的数据,导致一片存储空间没有利用。注意核实First sector后括号内的最小值和default(默认数值)后的数值是否一致。 ⑤是分区的结束位置,注意默认值和最大值相同即可。⑥和⑦的选择如图即可。
#刷新分区 partprobe /dev/sdc #这里是整个分区 #创建物理卷 pvcreate /dev/sdc3 #上图步骤中创建的那个分区 #查看卷组名称 vgdisplay #对应系统返回: --- Volume group --- VG Name centos_lytnib System ID Format lvm2 Metadata Areas 2 #后面系统返回的内容省略 #通过返回了解到VG Name为centos_lytnib。这个在后面使用。 #物理卷扩展到卷组 卷组名就是VG Name。 vgextend centos_lytnib /dev/sdc3 #中间的参数就是VG Name #查看当前逻辑卷的空间状态 lvdisplay #对应系统返回: --- Logical volume --- LV Path /dev/centos_lytnib/swap LV Name swap VG Name centos_lytnib #返回内容省略 --- Logical volume --- LV Path /dev/centos_lytnib/root LV Name root VG Name centos_lytnib #返回内容省略 #计划是把剩余空间分配给根分区,即root。发现第二个信息为根分区信息。LV Path的参数记下来(/dev/centos_lytnib/root),后面需要使用。 #将卷组中的空闲空间扩展到根分区的逻辑卷 lvextend -l +100%FREE /dev/centos_lytnib/root #LV Path的参数 #刷新根分区 xfs_growfs /dev/centos_lytnib/root #LV Path的参数此时,查看容量就会发现根分区容量变大了。实际使用硬盘工具查看会发现是分了三个分区,但是第三个分区的空间分给了根分区。
使用宝塔linux面板查看如下,根目录有了54G空间: