Linux:将新物理驱动器上的分区安装到目录 - 数据驻留在何处(物理上)?

Linux:将新物理驱动器上的分区安装到目录 - 数据驻留在何处(物理上)?

如果我有一台只有一个物理磁盘的机器,并且在操作系统安装并运行很久之后我对它进行分区并将新磁盘添加到目录(例如 /usr/data),那么这些文件在物理上存在于哪里,有没有办法确保它们都物理地驻留在我添加的新磁盘上?

类似地,我有一个实用程序,可以自动备份虚拟机中的虚拟驱动器,并且我想确保如果我在操作系统运行一段时间后备份我添加、分区并安装到特定目录的 vhd,那么我会备份该目录下的所有内容。

答案1

如果您将块设备安装到某个目录,那么您在该目录下创建的文件将创建在该块设备上。句号。

请注意,如果在将设备安装到目录之前该目录包含文件,则这些文件将保留在父块设备上,并且无法访问当设备已安装时。

类似地,如果您在未安装新块设备的情况下写入该目录,则此类文件最终会位于父块设备上。

所有这些都表明你应该做以下几件事:

  1. 如果该目录中存在文件,并且您希望在安装新设备后可以访问它们,则只需重命名整个目录,使用原始名称创建新目录,安装设备,然后将旧文件移动到新设备。

  2. 您应该确保您的设备在启动时安装,例如通过将其添加到/etc/fstab

答案2

“有没有办法确保它们都物理地驻留在我添加的新磁盘上?”

会发生这样的问题:如果由于某种原因,磁盘未安装,则数据将被静默写入旧磁盘,即应该安装的目录内。

通常我会使用两种不同的技术:第一种是在“真实”磁盘中创建一个特殊文件夹(例如 rar)。然后我检查它是否存在:如果存在,则磁盘实际上已安装,否则未安装

DIR="/monta/v-server_condivisioni/rar/"
if [ -d "$DIR" ]; then
  echo "Mounted"
else
  echo "NOT mounted"
fi

第二个是类似的(Unix,在Linux上非常相似),检查/monta/vserver_condivisioni是否已挂载(在此示例中通过smb)

df | grep -q /monta/v-server_condivisioni
if [ $? = 0 ]; then
    else
            /bin/date +"%R ----------/monta/v-server_condivisioni NOT mounted!"
            /usr/sbin/mount_smbfs -N -I 10.1.2.3 //theuser@v-server/condivisioni /monta/v-server_condivisioni
fi

相关内容