江月浓 發表於 2025-11-23 14:32:54

Linux服务器数据盘移除并重新挂载的全过程

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">引言</a></li><li><a href="#_label1">第一步:卸载文件系统</a></li><li><a href="#_label2">第二步:分离磁盘</a></li><li><a href="#_label3">第三步:重新挂载</a></li></ul></div><p class="maodian"><a name="_label0"></a></p><h2>引言</h2>
<p>在 Linux 服务器上移除并重新挂载数据盘整个过程分为三大步:</p>
<p>1、卸载文件系统 - 逻辑上断开系统与文件系统的连接。</p>
<p>2、分离磁盘 - 物理上断开磁盘与系统的连接(针对云盘)或解除挂载配置。</p>
<p>3、重新挂载 - 将磁盘再次挂载到系统。</p>
<p class="maodian"><a name="_label1"></a></p><h2>第一步:卸载文件系统</h2>
<p>首先,确保没有任何进程正在使用要卸载的磁盘上的文件。这是成功卸载的关键。</p>
<p><strong>1、确认挂载点和磁盘信息</strong></p>
<p>使用 df -h 或 lsblk 命令查看当前已挂载的磁盘信息,确定你要卸载的数据盘的挂载点(如 /data)和对应的设备名(如 /dev/vdb1)。</p>
<div class="jb51code"><pre class="brush:bash;">df -h
</pre></div>
<p>输出示例:</p>
<div class="jb51code"><pre class="brush:bash;">Filesystem      SizeUsed Avail Use% Mounted on
/dev/vda1      50G5.0G   45G10% /
/dev/vdb1       100G   60G   40G60% /data&lt;-- 这是我们要操作的数据盘
</pre></div>
<p>lsblk 命令可以更清晰地看到设备之间的层级关系(如哪个分区属于哪个磁盘):</p>
<div class="jb51code"><pre class="brush:bash;">lsblk
</pre></div>
<p>输出示例:</p>
<div class="jb51code"><pre class="brush:bash;">NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    050G0 disk
└─vda1 253:1    050G0 part /
vdb    253:16   0 100G0 disk
└─vdb1 253:17   0 100G0 part /data&lt;-- 设备是 /dev/vdb1,挂载点是 /data
</pre></div>
<p><strong>2、卸载文件系统</strong></p>
<p>使用 umount 命令卸载磁盘。切勿在命令中使用 n(unmount 是错误的)。</p>
<div class="jb51code"><pre class="brush:bash;"># 使用挂载点进行卸载(推荐)
sudo umount /data

# 或者使用设备名进行卸载
sudo umount /dev/vdb1
</pre></div>
<p><strong>3、处理&ldquo;target is busy&rdquo;错误</strong></p>
<p>如果提示 umount: /data: target is busy.,说明有进程正在访问该挂载点下的文件或目录。你需要终止这些进程。</p>
<p>方法A:使用 fuser 命令</p>
<div class="jb51code"><pre class="brush:bash;"># 查看哪些进程正在使用 /data
sudo fuser -mv /data

# 输出会显示进程PID,然后可以用 kill 终止它们
# 或者直接用 fuser 终止所有相关进程
sudo fuser -km /data

# 再次尝试卸载
sudo umount /data
</pre></div>
<p>方法B:使用 lsof 命令</p>
<div class="jb51code"><pre class="brush:bash;"># 查看哪些进程打开了 /data 下的文件
sudo lsof +f -- /data

# 根据列出的PID,手动终止进程,或使用以下命令终止所有相关进程
sudo lsof +f -- /data | awk '{print $2}' | grep -v PID | sudo xargs kill -9

# 再次尝试卸载
sudo umount /data
</pre></div>
<p>最后手段:懒卸载</p>
<p>如果实在无法终止所有进程(但你确认数据可以安全卸载),可以使用懒卸载。这有一定风险,仅作为最后手段。系统会在设备不再繁忙时再执行卸载,但你可能无法立即收到成功反馈。</p>
<div class="jb51code"><pre class="brush:bash;">sudo umount -l /data
</pre></div>
<p><strong>4、验证是否卸载成功</strong></p>
<p>再次运行 df -h 或 lsblk,检查 /data 挂载点是否已经从列表中消失。</p>
<div class="jb51code"><pre class="brush:bash;">df -h
# 此时应该看不到 /data 的挂载信息了
</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>第二步:分离磁盘</h2>
<p>卸载文件系统后,根据你的环境(物理机、虚拟机、云服务器)选择下一步操作。</p>
<p><strong>场景A:云服务器(如阿里云、腾讯云、AWS、Azure等)</strong></p>
<p>警告: 在控制台上操作分离磁盘前,必须先在操作系统内部完成卸载(第一步)。否则可能导致服务器文件系统损坏、数据丢失甚至无法正常开机。</p>
<p>登录你的云服务器控制台。</p>
<p>找到你的云服务器实例。</p>
<p>进入&ldquo;存储&rdquo;或&ldquo;磁盘&rdquo;相关管理页面。</p>
<p>找到已卸载的数据盘,并选择 &ldquo;卸载&rdquo; 或 &ldquo;分离&rdquo;(Detach)操作。</p>
<p>等待控制台提示卸载成功。</p>
<p>现在,你可以根据需求重新挂载它:</p>
<p>如果只是想改变挂载点(例如从 /data 改为 /mnt/newdata):你无需在控制台分离磁盘,只需完成第一步卸载,然后直接跳到下面的 第三步:重新挂载 即可。</p>
<p>如果想把磁盘挂载到另一台服务器:在控制台将其从当前服务器分离后,再将其挂载到目标服务器上,然后在目标服务器上执行 第三步。</p>
<p>如果只是想重新挂载到本机:分离后,再次在控制台将其 &ldquo;挂载&rdquo; 或 &ldquo;附加&rdquo;(Attach)到原来的服务器实例上。然后回到服务器终端。</p>
<p>对于云服务器,重新挂载后,设备名可能会变!(例如从 /dev/vdb 变成了 /dev/vdc)。务必使用 lsblk 命令重新确认设备名。</p>
<div class="jb51code"><pre class="brush:bash;">lsblk
# 仔细查看新挂载的磁盘是 vdb 还是 vdc
</pre></div>
<p><strong>场景B:物理服务器或本地虚拟机</strong></p>
<p>物理服务器直接断电后拔插硬盘即可。对于本地虚拟机(如 VMware、VirtualBox):</p>
<p>在虚拟机设置中,移除该硬盘设备。</p>
<p>如果需要重新挂载,再将其添加回来。<br />同样,设备名可能会发生变化,务必使用 lsblk 确认。</p>
<p class="maodian"><a name="_label3"></a></p><h2>第三步:重新挂载</h2>
<p>现在,磁盘已经处于&ldquo;已连接但未挂载&rdquo;的状态。</p>
<p><strong>1、再次确认设备名</strong></p>
<div class="jb51code"><pre class="brush:bash;">sudo lsblk
</pre></div>
<p>找到你的数据盘,确认其设备名(如 /dev/vdb1)并且没有 MOUNTPOINT。</p>
<p><strong>2、创建挂载点(如果需要)</strong></p>
<p>如果你要挂载到一个新的路径,需要先创建目录。</p>
<div class="jb51code"><pre class="brush:bash;">sudo mkdir -p /mnt/new_data
</pre></div>
<p>如果使用原来的挂载点(如 /data),则无需创建。</p>
<p><strong>3、挂载文件系统</strong></p>
<p>使用 mount 命令进行临时挂载(重启后失效):</p>
<div class="jb51code"><pre class="brush:bash;">sudo mount /dev/vdb1 /mnt/new_data
</pre></div>
<p><strong>4、验证挂载是否成功</strong></p>
<div class="jb51code"><pre class="brush:bash;">df -h
</pre></div>
<p>检查输出中是否包含了新挂载的磁盘和挂载点。</p>
<p><strong>5、配置开机自动挂载(非常重要)</strong></p>
<p>临时挂载在服务器重启后会失效。如需永久生效,必须修改 /etc/fstab 文件。</p>
<p>a. 获取文件系统的UUID(推荐)或标签<br />使用设备名(如 /dev/vdb1)在系统重启时可能会变化,而UUID是唯一的,更可靠。</p>
<div class="jb51code"><pre class="brush:bash;">sudo blkid /dev/vdb1
</pre></div>
<p>输出示例:</p>
<div class="jb51code"><pre class="brush:bash;">/dev/vdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"
</pre></div>
<p>记下 UUID 的值。</p>
<p>b. 备份 fstab 文件</p>
<div class="jb51code"><pre class="brush:bash;">sudo cp /etc/fstab /etc/fstab.bak
</pre></div>
<p>c. 编辑 fstab 文件</p>
<p>使用 vim 或 nano 等编辑器。</p>
<div class="jb51code"><pre class="brush:bash;">sudo vim /etc/fstab
</pre></div>
<p>d. 添加一行配置</p>
<p>在文件末尾添加新行,格式为:&lt;设备标识&gt; &lt;挂载点&gt; &lt;文件系统类型&gt; &lt;挂载选项&gt; &lt;dump选项&gt; &lt;fsck顺序&gt;<br />使用UUID(推荐):</p>
<div class="jb51code"><pre class="brush:bash;">UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/new_data ext4 defaults 0 0
</pre></div>
<p>或者使用设备名(不推荐):</p>
<div class="jb51code"><pre class="brush:bash;">/dev/vdb1 /mnt/new_data ext4 defaults 0 0
</pre></div>
<p>e. 检查 fstab 配置是否正确</p>
<p>这是一个非常重要的安全步骤,错误的 fstab 配置可能导致系统无法启动。</p>
<div class="jb51code"><pre class="brush:bash;">sudo mount -a
</pre></div>
<p>这个命令会尝试挂载 fstab 中所有配置了的设备。如果没有任何错误输出,并且 df -h 能看到磁盘,说明配置正确。如果有报错,必须立即修正 /etc/fstab 文件,否则重启后服务器可能无法正常进入系统。</p>
<p>至此,已完成数据盘的移除和重新挂载全过程。</p>
<p>以上就是Linux服务器数据盘移除并重新挂载的完整过程的详细内容,更多关于Linux数据盘移除并重新挂载的资料请关注琼殿技术社区其它相关文章!</p>
頁: [1]
查看完整版本: Linux服务器数据盘移除并重新挂载的全过程