scp大文件shell遷移


 

 

一  通常情況下,我門在同一台服務器拷貝數據最常用的命令便是cp,如果要在不同服務器之間拷貝的話可以用scp命令。

現在有兩台服務器,需要把A服務器上的文件遷移到B服務器上,因為文件太大,不能一直開着shell,我們需要把scp后台運行,如果我們直接在scp命令后加入 & 的話,關閉shell會話窗時,復制就回停止,有不同的方法能讓scp后台運行,下面我說下我用到的

我一開始的思路是 配置了 A免密登陸到B,在 scp后加入&實現,發現這樣不行,在關閉終端后,scp會停止

scp -r /data/fileupload/  30.0.218.1:/upload &   發現不行 

這時想到shell腳本

然后執行 

 #  nohup bash scp.sh &

這時關閉shell會話窗,重新打開;一個會話窗,發現scp進程還在 

用  df  -h 查看磁盤使用情況 ,發現一只在增加

 

其中遇到一個問題:

問題現象:使用ssh root@10.2.x.x命令連接服務器時,有時候會出現錯誤提示:Write failed:Broken pipe
 
問題原因:遠程服務器網絡連接不穩定導致這個會話中斷,簡單的方法就是使用ssh多嘗試幾次
 
解決方法:
1、客戶端設置:~/.ssh/ 文件夾中添加 config 文件,並添加下面的配置:ServerAliveInterval 60
2、在服務器的 /etc/ssh/sshd_config 中添加如下的配置:ClientAliveInterval 60
3、在登錄命令添加參數:ssh -o ServerAliveInterval=60 user@sshserver(一般一兩次就登錄上了)。

 

在使用nfs共享時候,卸載發現

umount.nfs: /mydata: device is busy

[root@localhost /]# umount /data/
umount.nfs: /mydata: device is busy
查看占用進程號:
[root@localhost /]# fuser -m -v /data/
                     用戶     進程號 權限   命令
/mydata/:              root       41331 
                              www      41223 ..c.. su 
將上面的進程kill掉,再刪除掛載。
[root@localhost /]# kill -9  41331 41223
[root@localhost /]# umount /data
[root@localhost /]#

 

另一種強制卸載方法   

# umount  -l  /data

 

注釋:

-m參數表明指定的路徑是一個掛載點顯示所有使用指定文件系統的進程,后面可以跟掛載點,-v參數給出詳細的輸出

用下面這個命令可以將占用目錄/dsg所有進程給kill掉:

$ fuser -m –k /data

這樣umount: /data: device is busy這個問題就可以解決.

 

同時fuser 可以用來查找哪些進程正在使用指定的端口(network port).

 

 

 
fuser 常用場景

fuser通常被用在診斷系統的“resource busy”問題,通常是在你希望umount指定的掛載點得時候遇到。 如果你希望kill所有正在使用某一指定的file, file system or sockets的進程的時候,你可以使用-k option。

 

 

#   fuser –k  /path/to/your/filename

 

這時fuser會向所以正在使用/path/to/your/filename的進程發送SIGKILL。如果你希望在發送之前得到提示,可以使用-i 選項。

#   fuser –k –i /path/to/your/filename

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM