# CentOS 7 rescue mode ###### tags: `系統`, `Linux` ## 如何進入救援模式 - 本次因為升級系統原生模組套件glibc2.17>2.18導致系統錯亂無法開啟,故需要進入救援模式救援資料庫資料。 - 透過VMware 啟動虛擬機 - 載入畫面Centos7 loading 快速按鍵`ESC` 進入開機選單 <img src="https://i.imgur.com/szAQH1e.png" width=700> - 點擊透過CD-ROM 開機 <img src="https://i.imgur.com/ZwcnIiA.png" width=700> - 點擊trouble shooting <img src="https://i.imgur.com/4VIhiil.png" width=700> - 點擊rescue <img src="https://i.imgur.com/gmUM9l1.png" width=700> - enter 進入模式 <img src="https://i.imgur.com/ltnvBLM.png" width=700> - 選1 <1(完整模式),2(讀取模式),3(略過shell),4(離開,重開機Quit)> <img src="https://i.imgur.com/wVghedC.png" width=700> - 預設系統安裝路徑/mnt/sysimage - 以root 身份進入系統bash `chroot /mnt/sysimage` <img src="https://i.imgur.com/iUg7OVr.png" width=700> - 無法使用chroot 系統: [參考連結](https://blog.csdn.net/geniusle201/article/details/115245073) 進入系統資料夾 ``` cd /mnt/sysimage ``` 檢查Bash連結 ``` ldd bin/bash ``` <img src="https://i.imgur.com/2yiCkHw.png"> 複製並覆蓋檔案 ``` mkdir lib64 cp /lib64/ld-linux-x86-64.so.2 ./lib64/ mkdir ./lib/x86_64-linux-gnu cp /lib/x86_64-linux-gnu/liblsp.so ./lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libtinfo.so.5 ./lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libdl.so.2 ./lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libc.so.6 ./lib/x86_64-linux-gnu/ /bin/bash ./bin ``` 測試 ``` chroot /mnt/sysimage ``` <img src="https://i.imgur.com/iUg7OVr.png" width=700> ## 於救援模式建立連線 參考來源: [網址](https://www.golinuxcloud.com/enable-ssh-configure-network-in-rescue-mode/) - 取得連線資訊-裝置名稱 (確認有state up) ``` ip link ``` - 建立 啟用ip ``` ip link set dev ens129 up ``` - 新增ip 位址 ``` ip addr add 192.1.68.5.1 dev ens129 ``` - check ip ``` ip a ``` - 設定route ``` ip route add default via 192.168.5.1 ``` - check route ``` ip route ``` - 測試 ``` ping 192.168.5.1 ``` ## 使用救援模式備份檔案 參考資源: [網址](http://tecmint.com/transfer-mysql-databases-from-old-to-new-server/) - 備份mysql 資料庫完整folder ``` rsync -avz /var/lib/mysql/* user@ip:/var/lib/mysql/ ``` ## remove ssh fingerprint ``` ssh-keygen -R 192.168.5.1 ``` # mongodb repair ## 安裝與損壞系統的mongodb同版本資料庫 [安裝教學網址](https://docs.mongodb.com/v4.2/tutorial/install-mongodb-on-red-hat/) - db版本確認(於rescue mode): ``` mongod --version ``` <img src="https://i.imgur.com/OU2ijg0.png" width=750> - 變更原始mogodb path DB資料名稱備存 ``` mv /var/lib/mongo /var/lib/mongo_origin ``` - 遠端傳遞至虛擬機 ``` rsync -avz /var/lib/mongo/* user@ip:/var/lib/mongo/ ``` - `systemctl start mongodb` 啟動失敗 - 直接使用 指令起服務 ``` mongod --dbpath /var/lib/mongo --fork --logpath /var/log/mongodb ``` - 出現錯誤 透過拿掉--fork 檢視錯誤,並排除錯誤 - 檢查/etc/mongod.conf 內的logpath 與db path 是否為 - `/var/lib/mongo` - `/var/log/mongodb/mongodb.log` ``` cat /etc/mongod.conf ``` - 成功啟動後將資料透過mongo 備份指令 輸出資料庫 - 進入mongodb 並秀出所有DB,確認是否成功載入過去Databases ``` mongo show dbs exit ``` <img src="https://i.imgur.com/kZHpMUv.png"> - 使用mongo備份指令 `mongodump -h 127.0.0.1 -d <dbName> -o /var/lib/mongo_origin/backup/` ``` mongodump -h 127.0.0.1 -d admin -o /var/lib/mongo/backup/ mongodump -h 127.0.0.1 -d config -o /var/lib/mongo/backup/ mongodump -h 127.0.0.1 -d finform -o /var/lib/mongo/backup/ mongodump -h 127.0.0.1 -d finproduct -o /var/lib/mongo/backup/ mongodump -h 127.0.0.1 -d local -o /var/lib/mongo/backup/ mongodump -h 127.0.0.1 -d test -o /var/lib/mongo/backup/ ``` - 確認完成備份後,移除所有mongodb server 資料,並重新安裝 ``` sudo yum erase mongodb-org* yum install -y mongodb-org ``` - 啟動mongo服務 ``` systemctl start mongod ``` - 成功後 將資料還原至mongo服務內 ``` mongorestore --db admin --verbose admin/ mongorestore --db config --verbose config/ mongorestore --db finform --verbose finform/ mongorestore --db finproduct --verbose finproduct/ mongorestore --db local --verbose local/ mongorestore --db test --verbose test/ ``` - 進入mongo並確認是否存在 ``` mongo show dbs exit ``` - 完成 <img src="https://i.imgur.com/kZHpMUv.png"> --- # glibc2.18 install <Warning!!! it will make system unboot> [reference link](https://serverfault.com/questions/894625/safely-upgrade-glibc-on-centos-7) ``` wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz tar zxvf glibc-2.18.tar.gz cd glibc-2.18 mkdir build cd build ../configure --prefix=/opt/glibc-2.18 make -j4 sudo make install ``` ``` patchelf --set-interpreter /opt/glibc-2.18/lib/ld-linux-x86-64.so.2 <your program want to use glibc2.18> ``` ## install patchelf [reference link](https://snapcraft.io/install/patchelf/rhel) - install epel-realease ``` rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm ``` - install snap ``` sudo yum install snapd ``` - enable snapd ``` sudo systemctl enable --now snapd.socket ``` - link snap ``` sudo ln -s /var/lib/snapd/snap /snap ``` - install patchelf ``` sudo snap install patchelf --edge --classic ``` - install patchelf from yum ``` yum install patchelf ```
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.