💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
    公司有台服务器,搬家搬过来搬过去的,现在都搞不清楚是谁负责的机器。白白放置了一个多月,期间也发过公告,也没同事响应。单用户进入系统之后,发现里面都是很老的数据,但是又不确定是否有用,也不敢乱来。so,  把硬盘的数据全部拷贝出来,免得白白浪费资源。 方案1:     直接复制整个硬盘,非常底层的数据复制,包括 boot loader 和分区表在内的所有数据都能完整的复制。不过目标盘的容量不能比源盘的容量低,否则文件系统容易悲剧(强烈建议:最好两块硬盘是同一容量和同一型号,否则比较麻烦。)。而且这种方式需要拷贝整个硬盘,即使你什么文件也没写,速度也很慢。 dd 命令可以复制单块硬盘: ~~~ # dd if=/dev/sda of=/dev/sdb & ddpid=$! ~~~ 可以在另一个终端向 dd进程发送 USR1 信号, 查看当前进度 ~~~ # kill -USR1 $ddpid ~~~ 也可以同时复制到多块硬盘 ~~~ # dd if=/dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) > /dev/null ~~~ 另外还有 G4L, CloneZilla这样的工具也可以进行全盘复制。 方案2: **1、挂载硬盘,添加分区** 第一步:添加硬盘/新建分区(fdisk) 第二步:格式化分区(mkfs.ext4) 第三步:加载分区(mount) 1、第一步:添加硬盘/新建分区(fdisk)  a、查看当前系统所有硬盘及分区情况:fdisk -l b、在指定的硬盘(例:/dev/sda)上创建分区:fdisk /dev/sdb , 根据提示进行下一步操作,如:查看帮助(h),新建分区(n),删除分区(d),查看分区情况(p) c、分区成功后,写分区表并退出(w) 注:fdisk 支持硬盘最大尺寸为 2TB,更详细说明请参看 Linux 在线手册(man fdisk)或百度一下。 2、第二步:格式化分区(mkfs.ext4)  对新建分区(例:/dev/sda1)进行格式化:mkfs.ext4 /dev/sdb1 。 3、第三步:加载分区  a、创建分区挂接目录,例:mkdir /disk-cache-1 和 mkdir /disk-cache-2 b、编辑 /etc/fstab 配置文件,将分区信息写进去。 c、加载新建分区:mount -a **2、复制文件系统根目录**,注意要排除目标盘 mount 的目录和系统自己 mount 的目录(可以用 mount -l 查看,比如/proc,/sys 这些目录) ~~~ # su - root # cd / # tar -cvpzf /mnt/backup.tgz --exclude=/proc --exclude=/sys --exclude=/lost+found --exclude=/mnt --exclude=/media --exclude=/var/tmp  / 或者 # tar c --exclude=/proc/* --exclude=$EXCLUDE_DIR / | (cd /mnt/sdb2; tar x) ~~~ c – 新建一个备份文档 v – 详细模式, tar程序将在屏幕上实时输出所有信息。 p – 保存许可,并应用到所有文件。 z – 采用‘gzip’压缩备份文件,以减小备份文件体积。 f – 说明备份文件存放的路径, /mnt/backup.tgz 是本例子中备份文件名。这个备份文件备份的位置是其它分区,也就是原来的WIN分区中。来看看我们想要包含的目录,我们不想备份所有的东西,因为有些目录是没有多大用处的。确认你不想包含的文件,否则您会得到一个很奇怪的结果。您也不必备份/mnt 目录下的东西,除非您有其他分区挂在它下面或者你坚持要备份。您还必须确保没有任何资源挂在 /media目录下(比如,任何CD或者移动存储介质),否则,剔除/media。 最后一个参数是我们想要保存的目录. 我们想要保存所有的东西,使用 / 作为根目录。 **3、还原的方法**:请注意,可能会覆盖您原有的数据,下面的操作必须小心。。 ~~~ # tar -xvpzf /mnt/backup.tgz -C / ~~~ 参数x是告诉tar程序解压缩备份文件。 -C 参数是指定tar程序解压缩到的目录。 **如果要把系统也搬过去,那么情况稍微复杂一点。**     用fdisk 对新硬盘进行分区,然后通过 mkfs.ext4 / mkswap 创建好文件系统和 swap分区,然后把分区 mount挂载到系统上。     修改 /etc/fstab,现在的linux系统基本都是通过 UUID 而不是 /dev/sdc1这样的方式来进行挂载的,所以要修改成新硬盘相应分区的UUID。 安装 boot loader     一开始我们以为直接用 dd 复制源硬盘 MBR 的前 446 字节(启动代码部分)过去就可以了,但启动发现连 grub 菜单都进不去。     其实 grub 启动包含了两个阶段的代码,第一阶段代码是在 MBR 里的,第二阶段在文件系统上,那么 grub 如何从第一阶段跳转到第二阶段呢?它是把第二阶段代码所在的磁盘扇区位置记录在 MBR 中 \[1\]。而这份代码在每块硬盘上的位置肯定是不一样的,于是 grub 没办法跳转到第二阶段继续执行。     所以我们得重新安装 boot loader: ~~~ # grub-install --root-directory=/mnt/sdb2 ~~~ 这里 --root-directory 是告诉 grub 说我们的根文件系统是在 sdb2 上而不是源硬盘上。 方案3: 可以试试 rsync   第一次全同步相当于复制 以后只同步修改过的文件。(我没有试过)