Linux备份Bash
我试图创建一个bash脚本,将整个/dev/sda1备份到/mnt/backupLinux备份Bash,linux,bash,ubuntu,backup,Linux,Bash,Ubuntu,Backup,我试图创建一个bash脚本,将整个/dev/sda1备份到/mnt/backup /dev/sda1 457G 3.5G 431G 1% / /dev/sdb1 2.8T 3.0G 2.8T 1% /mnt/Backup 具有以下功能的脚本: START=$(date +%D) FOLDER_NAME=`echo $START | tr -s '/' | tr '/' '_'` SOURCE_PATH='/media /bin /boot /cdrom
/dev/sda1 457G 3.5G 431G 1% /
/dev/sdb1 2.8T 3.0G 2.8T 1% /mnt/Backup
具有以下功能的脚本:
START=$(date +%D)
FOLDER_NAME=`echo $START | tr -s '/' | tr '/' '_'`
SOURCE_PATH='/media /bin /boot /cdrom /dev /etc /home /lib /opt /proc /root /run /sbin /selinux /srv /sys /tmp /usr /var'
SOURCE_PATH='/'
FOLDER_PATH='/mnt/Backup'
BACKUP_PATH=$FOLDER_PATH/Bkp_$FOLDER_NAME
mkdir -p '$BACKUP_PATH'
cp -r $SOURCE_PATH $BACKUP_PATH
正如您在上面的源路径中所看到的,我已经尝试命名所有我想要备份的文件夹,但是当我使用该路径运行时,我得到一个错误:这不是一个目录
然后我尝试了下面的源路径/和复制开始,但被卡住了
cp: reading `/proc/sysrq-trigger': Input/output error
cp: failed to extend `/mnt/Backup/Bkp_09_14_13/proc/sysrq-trigger': Input/output error
问题是如何更改脚本以成功地将sda1备份到sdb1
提前感谢您的帮助如果将/dev/sda1作为根文件系统装载,则在其上执行递归复制还将在其目录下包含装载的文件系统。您可以将其再次装载到另一个目录,例如/mnt/system,然后从中进行递归复制。我建议使用cp-a,而不仅仅是-r。我不确定您的实际程序,但这里有一些小事情:
START=$(date +%D)
FOLDER_NAME=`echo $START | tr -s '/' | tr '/' '_'`
$和``的作用完全相同。为什么要在一个脚本中同时使用两者?与反勾号相比,更喜欢$,因为它们可以嵌套。还有,tr-s'/'的意义是什么?首先,它可以压缩为一个tr:
echo "$START" | tr -s '/' '_'
但考虑到date+%D永远不会返回重复的斜杠,您可以使用纯bash参数展开:
FOLDER_NAME=${START//\//_}
这是怎么工作的:mkdir-p“$BACKUP\u PATH”?单引号中的变量不展开。更改为mkdir-p$BACKUP\u路径
$SOURCE\u PATH在cp-r$SOURCE\u PATH$BACKUP\u PATH中不需要引号,因为您希望将其拆分为不同的参数。没错。但您必须使用$BACKUP\u PATH,因为您希望它是单个参数
下面是您的脚本,有一些小的改进:
START=$(date +%D)
FOLDER_NAME=${START//\//_}
SOURCE_PATH='/media /bin /boot /cdrom /dev /etc /home /lib /opt /proc /root /run /sbin /selinux /srv /sys /tmp /usr /var'
SOURCE_PATH='/'
FOLDER_PATH='/mnt/Backup'
BACKUP_PATH=$FOLDER_PATH/Bkp_$FOLDER_NAME
mkdir -p "$BACKUP_PATH"
cp -r $SOURCE_PATH "$BACKUP_PATH"
/proc是一个虚拟文件系统,你为什么要备份它?嗨,Barmar,我正在备份sda1中的所有内容,/proc正好是mkdir-p$BACKUP\u路径,带双引号可能会有点帮助…嗨,如果mkdir命令已经在我已经有的另一个脚本上工作了。这里的问题似乎只是如何将所有数据从sda1复制到sdb1/proc不在sda1上。感谢您的回复。你认为如果我只从cp-r改为cp-a,脚本就能完成复制而不会出错吗?我觉得它可以工作,但实际上我还没有尝试过。大多数情况下,我只是在备份之前将系统装载到另一个目录上。您还打算从其他文件系统复制其他文件吗?e、 g.tmpfs在/tmp中,udev在/dev中,sysfs在/sys上?我不认为它们对备份是必要的。你可以只做mkdir-p/mnt/system;mount/dev/sda1/mnt/system;cd/mnt/系统;cp-a*/Somewhere唯一需要备份的是sda1i上的“/”,我有一台linux测试机器正在工作,我将在周一上午尝试您的选择,然后将其应用到实时环境Hi Aleks我将在周一上午在测试环境中尝试运行此改进的脚本,并让您知道它是如何运行的。非常感谢您抽出时间。赞赏