網路檔案共用服務介紹

2023-03-23 18:01:37

一:儲存架構

根據儲存裝置所在的位置分類

1、DAS

DAS:(Direct-Attached Storage)直連式儲存。伺服器使用專用線纜(例如SCSI)和儲存裝置(例如磁碟陣列)進行直連。

特點

  • 優點是儲裝置只能連線到一臺主機使用,無法共用,成本較高,且安全性可靠性較低
  • 缺點是容量有限,不適合大規模的資料儲存和共用。

使用場景:個人電腦、小型企業、高效能運算環境等。

2、NAS

NAS:(Network-Attached Storage)網路附加儲存。伺服器和儲存裝置非直連,而是通過ip網路進行連線,這樣就實現了多臺主機與儲存裝置之間的連線。

特點

  • 優點是易於管理、容量可延伸、能夠實現共用儲存和備份
  • 缺點存在IO瓶頸,效能較低,不適合高效能運算和資料庫應用

使用場景:檔案共用、備份和儲存等。

3、SAN

SAN:(Storage Area Network)儲存區域網路。基於NAS發展而來,通過專用光纖通道交換機存取資料,採用ISCSI、FC協定。

特點

  • 優點:解決了NAS的IO瓶頸問題,因為採用光纖、iSCSI等協定來連線裝置,速度很快。
  • 缺點:價格昂貴、結構複雜、需要專業的維護和管理。

使用場景:資料中心、虛擬化、雲端計算等環境

NAS和SAN區別
SAN:

可以理解為一種虛擬化儲存的技術,它將儲存裝置從伺服器中分離出來,形成一個獨立的儲存網路。

使用者端存取這些儲存裝置,就像存取本地硬碟一樣。因此,使用者端可以對這些儲存裝置進行格式化、分割區、掛載等操作。

NAS:

可以理解為一個儲存伺服器,它已經預先安裝了作業系統和檔案系統,並且已經格式化好了磁碟,因此使用者端裝置可以直接通過網路連線到NAS上來存取資料,而不需要進行格式化或設定檔案系統等操作。

使用者端裝置可以通過網路共用協定(如SMB/CIFS、NFS、AFP等)存取NAS上的資料。

塊儲存和檔案儲存

  • 塊儲存:是將資料切分為固定大小的塊(block),每個塊都有唯一的地址,可以單獨進行讀寫和處理。DAS和SAN使用的就是塊儲存。
  • 檔案儲存:是將資料以檔案形式儲存在一個統一的檔案系統中,每個檔案都有唯一的名稱和路徑,檔案系統可以通過檔名或路徑名來定位檔案。NAS使用的就是檔案儲存。

二:檔案共用服務

UNC 格式:

UNC:(Universal Naming Convention)通用命名規則。由微軟公司發明,是一種用於在網路上指定檔案或資料夾位置的命名約定,允許使用者通過網路共用存取檔案和資料夾。

UNC格式廣泛使用在windows中,Linux中也支援這種格式,例如使用Samba軟體包來實現檔案和印表機的共用。

格式: \\server\share 使用反斜槓(\)作為分隔符

  • server:表示共用資源所在的計算機名稱或IP地址
  • share: 表示共用資源的名稱

注意:

UNC路徑不能指定埠號,因為埠號不是共用資源的一部分,所以使用UNC格式的路徑時不能指定埠號。

\\10.0.0.22:446\share 是錯誤的

1、FTP

FTP:(File Transfer Protocol )檔案傳輸協定,屬於應用層協定,是NAS儲存架構的一種協定,基於CS結構。

FTP和NAS的區別:
FTP是一個應用層協定,用於實現跨主機傳輸檔案,NAS是一種網路架構,NAS可以使用各種協定進行檔案傳輸,包括FTP、SMB、NFS等,因此,FTP可以用於在NAS中傳輸檔案,但它本身不屬於NAS這種網路架構。

FTP的特點:
跨平臺:windows、linux等作業系統都支援FTP協定。

FTP工作原理:
採用的是雙埠模式,分為命令埠和資料埠,命令埠對應命令通道,資料埠對應資料通道。

  • 命令通道:使用者端和伺服器端之間傳輸FTP命令和響應,以控制檔案傳輸的整個過程。伺服器端的預設埠是tcp/21。
  • 資料通道:使用者端和FTP伺服器之間實際傳輸資料的通道。

FTP的兩種工作模式:

  • 主動模式:FTP伺服器主動連線使用者端,這個時候FTP伺服器的資料埠使用的是20埠。
  • 被動模式:使用者端主動連線FTP伺服器,這時候FTP伺服器的資料埠是隨機的。

說明:兩種工作模式是針對資料通道的建立來說的,無論是主動模式還是被動模式,FTP使用者端都需要連線到FTP伺服器的21號埠,以建立命令通道。

FTP的工作流程:
(1)FTP伺服器端開啟對21埠的監聽,等待使用者端的連線。
(2)使用者端發起連線,通過連線到伺服器端的21埠,建立命令通道。
(3)進行資料互動:

  • ​ 主動模式:伺服器端主動找使用者端建立資料通道,這個時候伺服器端使用的資料埠是20埠,使用者端隨機。
  • ​ 被動模式:使用者端主動連線伺服器端,這個時候雙方使用的埠都是隨機的。

FTP的實現:
windows

  • 使用者端:瀏覽器 、資源管理器、Filezilla等
  • 伺服器端:FileZilla Server、IIS等

Linux

  • 使用者端:ftp、wget、curl
  • 伺服器端:vsftpd、Wu-ftpd

Linx中用於搭建FTP伺服器的工具:VSFTP

特點:效能好、下載速度快、單機可支援15k並行量。紅帽預設使用的ftp伺服器端工具就是vsftp

2、NFS

NFS:(Network File System) 網路檔案系統,基於核心的檔案系統。Sun 公司開發,通過使用 NFS,使用者和程式可以像存取本地檔案一樣存取遠端系統上的檔案,基於RPC(Remote Procedure Call Protocol )遠端過程呼叫實現。

NFS工作原理:

  • 使用者端發起掛載請求:使用者端需要存取遠端主機上的檔案,它會向NFS伺服器發起掛載請求。
  • 伺服器返回掛載資訊:伺服器返回需要掛載的目錄資訊,包括目錄的檔案系統型別、許可權和存取方式等。
  • 使用者端進行掛載:使用者端使用NFS協定掛載遠端目錄,將目錄掛載到原生的一個掛載點上,此時使用者端可以像存取本地檔案一樣存取遠端檔案。
  • 使用者端讀寫檔案:使用者端通過掛載點存取遠端檔案,當用戶端需要讀寫遠端檔案時,它會傳送NFS請求到伺服器,請求伺服器讀取或寫入檔案資料。
  • 伺服器響應請求:伺服器接收到使用者端的請求後,會讀取或寫入相應的檔案資料,並將結果返回給使用者端。
  • 使用者端解除安裝掛載點:當用戶端不再需要存取遠端檔案時,它會解除安裝掛載點,斷開與NFS伺服器的連線。

NFS使用的埠:

  • Portmap(RPC bind)服務: Portmap服務使用TCP或UDP埠111,它是NFS和其他RPC服務的註冊和對映程式。
  • NFS服務:NFS服務使用TCP或UDP埠2049,它是NFS協定的主要埠。
  • Nlockmgr(Network Lock Manager)服務:Nlockmgr服務使用TCP或UDP埠32803,它用於提供NFS檔案鎖定服務。
  • Mountd(Mount Daemon)服務:Mountd服務使用TCP或UDP埠20048,它是NFS掛載協定的主要服務。

NFS的相關程序:

  • rpc.nfsd 最主要的NFS程序,管理使用者端是否可登入
  • rpc.mountd 掛載和解除安裝NFS檔案系統,包括許可權管理
  • rpc.lockd 非必要,管理檔案鎖,避免同時寫出錯
  • rpc.statd 非必要,檢查檔案一致性,可修復檔案

說明:CentOS 6 開始portmap程序由rpcbind代替

NFS的使用場景:

場景一:Linux和LInux之間實現檔案共用:

伺服器端共用出某個目錄後,使用者端直接掛載進行使用。

場景二:Linux和Windows之間實現檔案共用:

Linux作為伺服器端,windows掛載linux的共用目錄為原生的一個磁碟,Windows需要開啟NFS使用者端功能。

NFS的使用場景:

NFS:適用於需要在Unix和Linux系統之間進行檔案共用的環境,例如伺服器叢集和高效能運算環境。

3、samba

Samba是一種基於Windows的檔案共用協定開發而來的軟體,它可以在Windows、Linux和Unix系統之間共用檔案和印表機。Samba可以讓Linux或Unix系統像Windows一樣作為檔案伺服器,從而方便Windows系統使用者存取和使用共用檔案和印表機。

SMB協定:(Server Messages Block)資訊服務塊協定,由ibm開發,最早用在微軟的dos系統上面,windows之間的檔案共用就是使用SMB協定實現的。

CIFS:(common internet file system)通用網路檔案系統,基於smb協定開發而來的檔案系統,可以理解為SMB協定的升級版。

samba服務使用的埠:

預設是445和139埠

  • 445埠:實現Internet檔案共用
  • 139埠:檔案和列印共用

samba的使用場景:
場景一:Linux作為伺服器端,Windows作為使用者端實現檔案共用

通過網路驅動對映器對映為windows原生的一個磁碟。

場景二:windows作為伺服器端,linux作為使用者端實現檔案共用

samba服務存在的問題:

因為以前永恆之藍病毒和smb1的漏洞,運營商直接把139和445這兩個埠給遮蔽了,即使手動在防火牆開啟這兩個埠也沒法使用。

windows的檔案共用又預設使用的是139和445埠,無法更改使用者端的埠。

在linux作為伺服器端,windows作為使用者端的時候,因為windows預設埠沒法更改,且使用的是UNC路徑進行存取。

解決方法:

方法一:設定本地埠對映轉發

# https://blog.csdn.net/weixin_42552016/article/details/128421145
netsh interface portproxy add v4tov4 
		listenport=445 listenaddress=127.0.0.1 connectport=4450 connectaddress=116.116.132.151

方法二:使用埠轉發驅動

# Multi Port Forwarder驅動
	# https://tubecast.webrox.fr/landrive/portmapping.html
	# https://www.verigio.com/products/multi-port-forwarder/default

4、使用場景

samba:用於在Windows和Linux系統之間進行檔案共用。

NFS:支援多種作業系統,一般使用在linux和linux之間的檔案共用,也可以實現windows和linux之間的檔案共用。

FTP:FTP不像Samba和NFS一樣提供檔案系統級別的共用,它只是提供了一種簡單的方式來傳輸檔案,使用者端通過FTP使用者端軟體連線到FTP伺服器,然後可以上傳和下載檔案。FTP一般使用在將檔案從一個計算機上傳到另一個計算機。

三:跨主機拷貝檔案

1、SCP工具

scp是基於ssh協定開發的ssh使用者端工具。

# 使用格式                 
   #   Pull: 	scp  [option]  /source_file   [user@]remote_host/dest_file
   #   Push: 	scp  [option]  [user@]remote_host/dest_file  /source_file
# 選項
	-r:複製資料夾
	-P PORT 指明remote host的監聽的埠
# 說明 複製目錄檔案後面有無斜線的區別
	# 有斜線:複製資料夾裡面的內容。 例如:scp /data/ 10.0.0.22:~/    表示複製data中的檔案
	# 無斜線:複製整個資料夾 		 例如:scp /data  10.0.0.22:~/ 表示複製data整個目錄

例如:

# 不寫使用者名稱預設使用的就是當前主機使用的使用者
scp -r /data 10.0.0.22:/newdata   # 將本機的data目錄推到10.0.0.22的newdata中

scp -r 10.0.0.22:/newdata /data   # 將10.0.0.22的newdata拉到本機的/data目錄中

2、rsync工具

rsync是基於ssh協定開發的ssh使用者端工具。有三種工作模式:

選項:

# -a         保留原始檔的屬性,但是無法保留acl和selinux屬性  -a選項自帶遞迴的功能
# -v         顯示詳細的過程
# --delete   保證兩邊的資料一樣,如果目標檔案存在某個原始檔沒有的檔案,就會把目標檔案的這個檔案刪除掉
# -t --times 保持mtime屬性 強烈建議任何時候都加上"-t",否則目標檔案mtime會設定為當前系統時間,導致下次更新,檢查出mtime不同從而導致增量傳輸無效

(1)本地模式:作用就類似於cp、mv等命令,實現本地檔案系統的拷貝、重新命名等作用。

# 格式: rsync [OPTION] SRC... [DEST]

# 例如:
    [root@LAP1 data]# rsync file1  file111 # 實現檔案拷貝功能
    [root@LAP1 data]# ls
    file1   file111 

(2)基於傳統的SSH協定模式:類似於scp的作用,實現遠端主機拷貝

# Pull:rsync [OPTION...] [USER@]HOST:SRC... [DEST]
# Push:rsync [OPTION...] SRC... [USER@]HOST:DEST

# 例如
	rsync  -av  /etc server1:/tmp    # 複製目錄和目錄下檔案
	rsync  -av /etc/ server1:/tmp   # 只複製目錄下檔案 和scp一樣
	rsync -av --delete source_file host:/dest_file  # 跨主機備份
		# rsync -av --delete /data/  10.0.0.12:/back

(3)作為一個獨立服務模式

rsync作為一個獨立的服務執行,

Pull:
	# rsync [OPTION...] [USER@]HOST::SRC... [DEST]
	# rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] # 協定的形式存取,效果等同於上面

Push:
	# rsync [OPTION...] SRC... [USER@]HOST::DEST
	# rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

例如:

rsync  -av  /etc server1:/tmp    # 複製目錄和目錄下檔案
rsync  -av /etc/ server1:/tmp   # 只複製目錄下檔案 和scp一樣
rsync -av --delete source_file host:/dest_file  # 跨主機備份

說明:本地模式和ssh模式是通過本地或遠端shell,而獨立服務執行模式則是讓遠端主機上執行rsyncd服務,使其監聽在一個埠上,等待使用者端的連線。

四:檔案定時同步

rsync + cron計劃任務

可以實現最快每1分鐘同步一次檔案。

說明:rsync使用的是基於傳統的SSH協定的工作模式

例如:

root@ubuntu1804:~# crontab -e
# m h  dom mon dow   command
*/10 * * * * /usr/bin/rsync -av --delete /data/  10.0.0.12:/back

五:檔案實時同步

監聽檔案的相關屬性事件,檔案發生變化的時候就觸發同步,使用inotify或者sersync監聽檔案的變化。

1、inotify + rsync

inotify:系統核心的一個監控服務,屬於作業系統核心的一個特有機制,用於監控檔案的資訊變化。

inotify管理工具:來自於inotify-tools軟體包,軟體包裡面包含了兩個主要的工具inotifywait和inotifywatch。

  • inotifywait: 在被監控的檔案或目錄上等待特定檔案系統事件(open ,close,delete等)發生,常用於實時同步的目錄監控(主要使用的就是這個工具)
  • inotifywatch:收集被監控的檔案系統使用的統計資料,指檔案系統事件發生的次數統計

rsync:使用的是rsync的第三種工作模式(獨立服務模式)。

例如:

# 1. 備份伺服器啟動 rsync 程序,程序啟動後監聽tcp的873埠。

# 2. 伺服器的inotify發現資料發生變化後,就執行:
		rsync -av /data [email protected]::/databackup    # 以服務的形式存取
		# rsync -av /data rsync://192.168.0.104/databackup  # 以協定的形式存取

2、sersync + rsync

sersync類似於inotify,同樣用於監控,是基於inotify基礎上開發而來,並且克服了inotify一個操作可能會產生重複的事件,這樣可能會觸發rsync的多次同步的問題。

sersync特點:

  • 會對對linux系統檔案系統產生的臨時檔案和重複的檔案操作進行過濾,在結合rsync同步的時候,節省了執行時耗和網路資源
  • 設定簡單,提供了要給xml組態檔和一個二進位制可執行檔案
  • 採用多執行緒模式
  • 自帶crontab功能
# sersync專案地址: https://code.google.com/archive/p/sersync/
# sersync下載地址: https://code.google.com/archive/p/sersync/downloads

例如: