linux 不改變目錄結(jié)構(gòu)移動(dòng) home 目錄到新分區(qū)的操作方法
問題提出
公司的開發(fā)測(cè)試服務(wù)器部署在阿里云, 阿里云給出的實(shí)例一般都是只有一個(gè)分區(qū), 20G到40G的樣子, 然后再買存儲(chǔ)掛載到其他目錄.
而 home 目錄是在這個(gè) 20G 的跟目錄分區(qū)下的. 隨著開發(fā)人員增多, 根目錄分區(qū)很快被大家填滿了.
因?yàn)槭嵌嗟匮邪l(fā), 因此需要一個(gè)無感知的給大家的 home 搬家的方案.
基本原理
接到這個(gè)任務(wù), 首先想到的就是 bind mount 方式:
mount --bind /some/where /else/where
可以實(shí)現(xiàn)無感知搬家 home.
感覺搜索中文沒有對(duì)這個(gè)命令解釋太清楚的.這篇問答 講的比較清楚, 英文好的同學(xué)可以參考下.
當(dāng)然, 也可以問"男人": man mount
具體操作
首先選個(gè)夜深人靜的時(shí)候, 使用 who 命令查看還有那些小朋友賴在服務(wù)器不肯走, 打電話一一清場(chǎng):
$ who Frodo pts/0 2017-04-17 09:07 (xx.xxx.xxx.xx) Sam pts/1 2017-04-18 08:45 (xx.xxx.xxx.xx) Pippin pts/3 2017-04-18 09:06 (xx.xxx.xxx.xx) Merry pts/4 2017-04-18 09:07 (xx.xxx.xxx.xx)
確定四下無人后, 開始搬家(復(fù)制). 使用 cp 命令復(fù)制時(shí), 記得帶上 -p 參數(shù), 保留文件權(quán)限設(shè)置. 使用 root 權(quán)限, 假設(shè)目標(biāo)分區(qū)為 /new_disk :
# cp -p -r /home /new_disk/
新家已經(jīng)建好, 我們先給老家弄個(gè)另外的門牌號(hào), 以免把門牌號(hào)給新家后, 找不到老家了. 利用 mount --bind 把原 home 目錄掛載到一個(gè)新目錄:
# mkdir /home_bkp # mount --bind /home /home_bkp
這時(shí)我們就可以在 /home_bkp 這個(gè)目錄下找到老家的所有文件. 可以把 /home 這個(gè)門牌給新家了:
# mount --bind /new_disk/home /home
搬家完成! 可以通知小伙伴們愉快的工作了. 事實(shí)上, 可以不通知大家, 搬家這個(gè)事情對(duì)大家其實(shí)是無感知的.
當(dāng)然有同學(xué)會(huì)問, 新家老家門牌一樣, 都是 /home, 我怎么知道搬家是否成功? 可以使用 df 命令確認(rèn):
# cd /home_bkp # df -h . Filesystem Size Used Avail Use% Mounted on /dev/xvda1 20G 17G 2.1G 90% / # cd /home # df -h . Filesystem Size Used Avail Use% Mounted on /dev/xvdb1 296G 42G 240G 15% /new_disk
-h 為 human-readable, 不加的話也可以, 那列出的就是"反人類"的塊為單位了.
上面的命令, 先去老家看看, 掛載點(diǎn)是 / ; 再去新家看看, 掛載點(diǎn)是 /new_disk . 這下可以放心了.
持久化
工作還沒完. 上面的工作只是保證了當(dāng)前新家換地址. 但重啟后, 這個(gè)信息會(huì)丟失, 家地址會(huì)換回去. 我們需要想辦法保留這個(gè)信息.
修改 /etc/fstab 文件即可. 打開這個(gè)文件, 在最后面加入下面兩行:
/home /home_bkp none bind 0 0 /new_disk/home /home none bind 0 0
這樣整個(gè) home 切換分區(qū)工作就完成了.
后記
這個(gè)方案是心血來潮想出來的, 并沒有找到前車之鑒, 不知道會(huì)不會(huì)有坑... 目前該方案下服務(wù)器已運(yùn)行近一年, 還沒出現(xiàn)啥問題, 大家工作的都很愉快, 甚至很多人都不知道有這件事情.
老家的目錄 /home_bkp 在該方案實(shí)施1個(gè)月后, 看沒啥問題, 就清空了, 騰空間出來.
相關(guān)文章
linux查看防火墻狀態(tài)與開啟關(guān)閉命令詳解
linux查看防火墻狀態(tài)與開啟關(guān)閉命令常用的有以下兩種方式,大家可以參考一下2018-03-03Linux服務(wù)器和docker時(shí)區(qū)修改問題
這篇文章主要介紹了Linux服務(wù)器和docker時(shí)區(qū)修改問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06linux內(nèi)核copy_{to, from}_user()的思考
本文即將介紹copy_{to,from}_user()接口的使用應(yīng),它是kernel space和user space溝通的橋梁,接下來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08Discuz 7.0偽靜態(tài)ReWrite的.htaccess規(guī)則
在確定您的服務(wù)器支持偽靜態(tài)ReWrite后,您可以通過修改設(shè)置.htaccess文件來實(shí)現(xiàn)Discuz論壇的偽靜態(tài)功能2010-12-12在Linux中使用iptables設(shè)置端口轉(zhuǎn)發(fā)的步驟
在Linux系統(tǒng)中,iptables是一個(gè)非常強(qiáng)大的防火墻工具,用于管理網(wǎng)絡(luò)數(shù)據(jù)包的過濾和轉(zhuǎn)發(fā),它允許系統(tǒng)管理員根據(jù)特定的規(guī)則來控制數(shù)據(jù)包的流動(dòng),本文給大家介紹了如何在?Linux?中使用?iptables?設(shè)置端口轉(zhuǎn)發(fā),需要的朋友可以參考下2024-05-05詳解如何在 CentOS 7 中安裝或升級(jí)最新的內(nèi)核
這篇文章主要介紹了詳解如何在 CentOS 7 中安裝或升級(jí)最新的內(nèi)核,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03