基于DIY主機+CentOS搭建模塊化NAS系統(tǒng)
NAS介紹
NAS(Network Attached Storage): 網(wǎng)絡(luò)附屬存儲
按市場定位劃分
企業(yè)級NAS
家用級NAS
家用級NAS功能
以群暉為例:
文件系統(tǒng)共享
文件同步
容器
虛擬機
下載
流媒體
備份
家用NAS解決方案
直接購買軟硬件結(jié)合消費級產(chǎn)品
優(yōu)點:時間成本,學(xué)習(xí)成本,云服務(wù)
缺點:性價比,性能
兼容的主機安裝發(fā)行版NAS系統(tǒng)
優(yōu)點:同時兼顧了可視化,學(xué)習(xí)成本和性價比
缺點:服務(wù)管理和系統(tǒng)管理
主流主機+最小化操作系統(tǒng)上搭建服務(wù)
優(yōu)點:兼容性,系統(tǒng)管理和服務(wù)管理
缺點:學(xué)習(xí)成本,時間成本
自己在家設(shè)計芯片/文件系統(tǒng)/操作系統(tǒng)
優(yōu)點:性能,創(chuàng)新
缺點:技術(shù)難度
DIY主機
機箱
塔式機箱
中塔
全塔
NAS機箱
MATX
ITX
微型電腦
樹莓派等
CPU
服務(wù)器cpu
臺式機cpu
嵌入式
大致考慮以下幾點:
功耗
噪音
穩(wěn)定性
性能
性價比
擴展性
操作系統(tǒng)
RHEL,CentOS,Ubuntu,SUSE,Fedora,Windows Server,Windows
最小化安裝CentOS 8
過程略
LVM RAID
描述
lvm(8)RAID是一種創(chuàng)建邏輯卷(LV)的方法,它使用多個物理設(shè)備來提高性能或容忍設(shè)備故障。在LVM中,物理設(shè)備是單個卷組(VG)中的物理卷(PV)。
LV數(shù)據(jù)塊如何放置在PV上取決于RAID級別。RAID級別通常稱為“RAID”,后跟一個數(shù)字,例如raid1、raid5或raid6。選擇RAID級別需要在以下方面進行權(quán)衡:物理設(shè)備要求、容錯性和性能。有關(guān)RAID級別的說明,請訪問www.snia.org/sites/default/files/SNIA_DDF_Technical_Position_v2.0.pdf
LVM RAID使用Linux內(nèi)核中的設(shè)備映射器(DM)和多個設(shè)備(MD)驅(qū)動程序。DM用于創(chuàng)建和管理可見LVM設(shè)備,MD用于在物理設(shè)備上放置數(shù)據(jù)。
LVM在可見LV和物理設(shè)備之間創(chuàng)建分層的隱藏LV(dm設(shè)備)。中間層的LVS被稱為子LVS。對于LVM raid,將為每個raid映像/分支創(chuàng)建一個子LV對來存儲數(shù)據(jù)和元數(shù)據(jù)(raid超級塊和寫意圖位圖)(請參見下面的lvs命令示例)。
USAGE
要創(chuàng)建RAID LV,請使用lvcreate并指定LV類型. The LV type corresponds to a RAID level. 可以使用的基本RAID級別有: raid0, raid1, raid4, raid5, raid6,raid10.
lvcreate --type RaidLevel [OPTIONS] --name Name --size Size VG [PVs]
To display the LV type of an existing LV, run:
lvs -o name,segtype LV
(The LV type is also referred to as "segment type" or "segtype".)
LVs can be created with the following types:
raid0
也叫 striping, raid0 spreads LV data across multiple devices in units of stripe size. 這用于提高性能. 如果任何設(shè)備出現(xiàn)故障,LV數(shù)據(jù)將丟失.
lvcreate --type raid0 [--stripes Number --stripesize Size] VG [PVs]
--stripes Number
指定要在其上分布LV的設(shè)備數(shù)。
--stripesize Size
指定每個條帶的大小(以KB為單位)。這是移動到下一個設(shè)備之前寫入一個設(shè)備的數(shù)據(jù)量。
PVs指定要使用的設(shè)備。如果未指定,lvm將根據(jù)可用或提供的PV數(shù)量選擇多個設(shè)備,每個條帶一個。
raid1
也叫 mirroring, raid1 uses multiple devices to duplicate LV data. 如果除一個設(shè)備外的所有設(shè)備都出現(xiàn)故障,LV數(shù)據(jù)仍然可用. The minimum number of devices (i.e. subLV pairs) required is 2.
lvcreate --type raid1 [--mirrors Number] VG [PVs]
--mirrors Number
指定除原始LV映像之外的鏡像映像數(shù),例如--mirrors 1表示數(shù)據(jù)有兩個映像,原始映像和一個鏡像。
PVs指定要使用的設(shè)備。如果未指定,lvm將選擇多個設(shè)備,每個鏡像一個。
raid5
raid5是條帶化的一種形式,它使用額外的設(shè)備來存儲奇偶校驗塊。LV數(shù)據(jù)和奇偶校驗塊存儲在每個設(shè)備上,出于性能原因,通常以旋轉(zhuǎn)模式存儲。如果一臺設(shè)備出現(xiàn)故障,LV數(shù)據(jù)仍然可用。奇偶校驗用于重新計算單個設(shè)備丟失的數(shù)據(jù)。所需的最少設(shè)備數(shù)量為3個 (unless converting from 2 legged raid1 to reshape to more stripes; seereshaping).
lvcreate --type raid5 [--stripes Number --stripesize Size] VG [PVs]
--stripes Number
LV數(shù)據(jù)的設(shè)備數(shù)。這不包括lvm為存儲奇偶校驗塊而添加的額外設(shè)備。帶有數(shù)字條紋的raid5 LV需要數(shù)字+1設(shè)備。數(shù)字必須為2或更多。
--stripesize Size
條帶的大?。ㄒ訩B為單位)。這是移動到下一個設(shè)備之前寫入一個設(shè)備的數(shù)據(jù)量。
PVs指定要使用的設(shè)備。如果未指定,lvm將選擇第+1個單獨的設(shè)備。
raid5被稱為旋轉(zhuǎn)奇偶校驗,因為奇偶校驗塊以循環(huán)順序放置在不同的設(shè)備上。raid5有多種不同的算法,用于放置奇偶校驗塊。默認變量是raid5_ls(raid5左對稱,這是一個帶數(shù)據(jù)重啟的旋轉(zhuǎn)奇偶校驗0。)請參閱下面的RAID5 VARIANTS
SubLVs
LV通常是其他隱藏LV的組合,稱為子LV。子虛擬機使用物理設(shè)備,或者由其他子虛擬機本身構(gòu)建。子虛擬機保存LV數(shù)據(jù)塊、RAID奇偶校驗塊和RAID元數(shù)據(jù)。子V通常是隱藏的,因此需要lvs -a選項來顯示它們:
lvs -a -o name,segtype,devices
設(shè)備故障
RAID LV中的物理設(shè)備可能會由于多種原因發(fā)生故障或丟失。設(shè)備可能已斷開連接、永久性故障或暫時斷開連接。RAID LVs(級別1及更高)的目的是在降級模式下繼續(xù)運行,即使在設(shè)備發(fā)生故障后也不會丟失LV數(shù)據(jù)。在不丟失LV數(shù)據(jù)的情況下發(fā)生故障的設(shè)備數(shù)量取決于RAID級別:
如果RAID LV缺少設(shè)備或存在其他與設(shè)備相關(guān)的問題,lvs會在健康狀況(和屬性)字段中報告:
lvs -o name,lv_health_status
激活丟失設(shè)備的LV
丟失設(shè)備的RAID LV可能會被激活或不被激活,這取決于lvchange中使用的“激活模式”:
lvchange -ay --activationmode complete|degraded|partial LV
更換設(shè)備
RAID LV中的設(shè)備可以由VG中的其他設(shè)備替換。更換系統(tǒng)上不再可見的設(shè)備時,請使用lvconvert --repair。更換仍然可見的設(shè)備時,請使用lvconvert --replace。repair命令將嘗試恢復(fù)先前在LV中的相同數(shù)量的數(shù)據(jù)LV。replace選項重復(fù)替換多個PV。替換設(shè)備可以選擇與任一選項一起列出。
lvconvert --repair LV [NewPVs]
lvconvert --replace OldPV LV [NewPV]
lvconvert --replace OldPV1 --replace OldPV2 LV [NewPVs]
刷新LV
刷新RAID LV將清除任何瞬時設(shè)備故障(設(shè)備暫時斷開連接),并將LV返回到其完全冗余模式?;謴?fù)設(shè)備通常至少需要部分同步(請參閱同步)。未能清除瞬態(tài)故障會導(dǎo)致RAID LV在降級模式下運行,直到其重新激活。使用lvchange命令刷新LV:
lvchange --refresh LV
RAID TAKEOVER
RAID takeover是將RAID LV從一個RAID級別轉(zhuǎn)換為另一個RAID級別,例如從raid5轉(zhuǎn)換為raid6。更改RAID級別通常是為了增加或減少對設(shè)備故障的恢復(fù)能力,或是為了對LV進行重新restripe。這是使用lvconvert完成的,并將新RAID級別指定為LV type:
lvconvert --type RaidLevel LV [PVs]
最常見和推薦的RAID akeover 管轉(zhuǎn)換有:
linear?to?raid1
which is a direct copy of the original linear image.
striped/raid0?to?raid4/5/6
Adding parity devices to a striped volume results in raid4/5/6.
以下takeover轉(zhuǎn)換目前是可能的:
between striped and raid0.
between linear and raid1.
between mirror and raid1.
between raid1 with two images and raid4/5.
between striped/raid0 and raid4.
between striped/raid0 and raid5.
between striped/raid0 and raid6.
between raid4 and raid5.
between raid4/raid5 and raid6.
between striped/raid0 and raid10.
between striped and raid4.
間接轉(zhuǎn)換
從一個raid級別轉(zhuǎn)換到另一個raid級別可能需要多個步驟,首先轉(zhuǎn)換到中間raid級別
linear?to?raid6
將LV從線性轉(zhuǎn)換為raid6:
convert to raid1 with two images
convert to raid5 (internally raid5_ls) with two images
convert to raid5 with three or more stripes (reshape)
convert to raid6 (internally raid6_ls_6)
convert to raid6 (internally raid6_zr, reshape)
執(zhí)行上述步驟的命令如下:
lvconvert --type raid1 --mirrors 1 LV
lvconvert --type raid5 LV
lvconvert --stripes 3 LV
lvconvert --type raid6 LV
lvconvert --type raid6 LV
從raid6_ls_6到raid6_zr的最終轉(zhuǎn)換是為了避免由于專用奇偶校驗設(shè)備而導(dǎo)致raid6_ls_6中潛在的寫/恢復(fù)性能降低。raid6_zr旋轉(zhuǎn)數(shù)據(jù)和奇偶校驗塊以避免這種情況。
linear?to?striped
要將LV從linear轉(zhuǎn)換為striped,請執(zhí)行以下操作:
convert to raid1 with two images
convert to raid5_n
convert to raid5_n with five 128k stripes (reshape)
convert raid5_n to striped
執(zhí)行上述步驟的命令包括:
lvconvert --type raid1 --mirrors 1 LV
lvconvert --type raid5_n LV
lvconvert --stripes 5 --stripesize 128k LV
lvconvert --type striped LV
使用步驟2中的raid5_n類型是因為它在末尾有專用的奇偶校驗子LV,并且可以直接轉(zhuǎn)換為striped.在步驟3中增加條帶大小,為轉(zhuǎn)換過程添加額外空間。此步驟將LV大小增加五倍。轉(zhuǎn)換后,可以減少額外的空間(或使用LV擴展文件系統(tǒng))。
Reversing 這些步驟會將條帶狀LV轉(zhuǎn)換為線性LV
RAID整形
RAID重塑是在保持相同RAID級別的同時更改RAID LV的屬性。這包括更改RAID布局、條帶大小或條帶數(shù)量。
RAID5變體
raid5_ls
RAID5 左對稱
帶數(shù)據(jù)重啟的輪轉(zhuǎn)奇偶校驗N
raid5_la
RAID5左不對稱
帶數(shù)據(jù)延續(xù)的旋轉(zhuǎn)奇偶校驗N
raid5_rs
RAID5右對稱
Rotating parity 0 with data restart
raid5_ra
RAID5右不對稱
Rotating parity 0 with data continuation
raid5_n
RAID5奇偶校驗n
用于條帶化/raid0轉(zhuǎn)換的專用奇偶校驗設(shè)備n
用于RAID接管Takeover
參考
dm-raid — The Linux Kernel documentation
https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-raid.html
lvmraid
https://www.linux.org/docs/man7/lvmraid.html
LVM stripe addition failing with "1 extents needed, but only 0 available" or "Insufficient suitable allocatable extents for logical volume"
https://access.redhat.com/solutions/3264531
LVM caching
lvm(8)包括兩種緩存,可用于提高邏輯卷(LV)的性能。緩存時,LV數(shù)據(jù)的不同子集臨時存儲在更小更快的設(shè)備(如SSD)上,以提高LV的性能。
要使用lvm實現(xiàn)這一點,首先從速度更快的設(shè)備創(chuàng)建一個新的特殊LV。此LV將保存緩存。然后,新的快速LV通過lvconvert命令連接到主LV。lvconvert將一個設(shè)備映射器緩存目標(biāo)插入到主LV的i/o路徑中。device mapper target將主LV和快速LV組合成一個看起來像主LV但性能更好的混合設(shè)備。在使用主LV時,其部分數(shù)據(jù)將臨時透明地存儲在專用fast LV上。
兩種緩存是:
使用dm cache內(nèi)核模塊的讀寫熱點緩存。此緩存跟蹤訪問模式并有意調(diào)整其內(nèi)容,以便在快速存儲器上找到主LV的常用部分。LVM使用LV類型緩存來引用它。
使用dm writecache內(nèi)核模塊的寫緩存。此緩存可與SSD或PMEM設(shè)備一起使用,以加速對主LV的所有寫入。從主LV讀取的數(shù)據(jù)不存儲在緩存中,只存儲新寫入的數(shù)據(jù)。LVM使用LV類型的writecache來引用它。
除極客外, 一般情況不需要緩存盤. 包括做種不多的下載盤
參考文檔:lvmcache(7) manpage
CEPH
Ceph 訪問方式
Ceph 原生 API (librados)
實施其他 Ceph 接口(例如 Ceph Block Device 和 Ceph Object Gateway)的基礎(chǔ)庫是 librados
librados 是原生 C 庫,允許應(yīng)用直接使用 RADOS 來訪問Ceph 集群中存儲的對象。也有類似的庫適用于 C++、Java、Python、Ruby 和 PHP
為最大化性能,請編寫軟件以直接與 librados 配合使用
為了簡化對 Ceph 存儲的訪問,可以改為更高級訪問方式,如RADOS Block Device、Ceph Object Gateway(RADOSGW)和 CephFS
RADOS 塊設(shè)備
Ceph Block Device(RADOS Block Device 或 RBD)通過RBD image 在 Ceph 集群內(nèi)提供塊存儲
組成 RBD 的對象分布到不同的 OSD,對塊設(shè)備的訪問自動并行處理
Ceph Object Gateway(RADOS Gateway)
Ceph 對象網(wǎng)關(guān)(RADOS 網(wǎng)關(guān)、RADOSGW 或 RGW)是使用 librados 構(gòu)建的對象存儲接口,通過 RESTful API 為應(yīng)用提供了網(wǎng)關(guān),并且支持兩種接口:Amazon S3 和 OpenStack Swift
Ceph File System(CephFS)
CephFS 是一種并行文件系統(tǒng),提供可擴展的、單層級結(jié)構(gòu)共享磁盤。紅帽 Ceph Storage 4 提供對 CephFS 的生產(chǎn)環(huán)境支持,包括快照支持
Ceph Metadata Server (MDS) 管理 CephFS 中文件的元數(shù)據(jù)。包括文件的訪問、更改 和修改時間戳等信息
了解池
池是用來存儲對象的邏輯分區(qū)。Ceph 客戶端將對象寫入池中
池類型
池類型有復(fù)制池和糾刪代碼池
復(fù)制池是默認的池類型,將對象復(fù)制到多個 OSD ,需要更多的存儲空間,但讀操作不受副本丟失的影響
糾刪代碼池需要的存儲空間和網(wǎng)絡(luò)帶寬較小,但因為奇偶校驗計算,計算開銷會更高一些
對于不需要頻繁訪問且不需要低延遲的數(shù)據(jù),可選擇糾刪代碼池
對于經(jīng)常訪問并且需要快速讀取性能的數(shù)據(jù),選擇復(fù)制池
創(chuàng)建復(fù)制池
Ceph 通過創(chuàng)建對象的多個副本來保護復(fù)制池中的數(shù)據(jù),稱為副本(replica)。副本存儲在池中的不同 OSD 中,一個或多個OSD 出現(xiàn)故障時,對象中的數(shù)據(jù)會得到保護
配置糾刪代碼池
糾刪代碼池使用糾刪代碼而非復(fù)制來保護對象數(shù)據(jù)
糾刪代碼池中存儲的對象分割為多個數(shù)據(jù)區(qū)塊,這些數(shù)據(jù)區(qū)塊存儲在不同的 OSD 中。此外,根據(jù)數(shù)據(jù)區(qū)塊計算一系列編碼區(qū)塊,它們也存儲在不同的 OSD 中。當(dāng)含有區(qū)塊的 OSD 出現(xiàn)故障時,可利用編碼區(qū)塊來重建對象的數(shù)據(jù)
Ceph 文件系統(tǒng)和 MDS
Ceph 文件系統(tǒng) (CephFS) 是一種兼容 POSIX 的文件系統(tǒng),可以像使用傳統(tǒng)文件系統(tǒng)一樣整理自己的數(shù)據(jù)
若要實施 Ceph 文件系統(tǒng),需要一個正在運行的 Ceph 存儲集群;至少一臺 Ceph 元數(shù)據(jù)服務(wù)器 (MDS) 來管理元數(shù)據(jù)
與 RBD 和 RGW 一樣,CephFS 服務(wù)使用 librados 的原生接口
SAMBA
描述SMB
Server Message Block (SMB) 是 Microsoft Windows 的標(biāo)準(zhǔn)文件共享協(xié)議。
配置獨立服務(wù)器是最簡單的方法,其中服務(wù)端和客戶端是Windows 工作組成員。服務(wù)器在本地管理用戶帳戶和密碼
更復(fù)雜的配置使用 Microsoft Active Directory (AD) 通過域控制器來協(xié)調(diào)用戶身份驗證
RHEL 支持訪問和提供 SMB 文件共享。客戶端安裝 cifs-utils軟件包;服務(wù)端安裝 samba 軟件包
使用 SMB 共享目錄
Samba 共享 Linux 目錄。服務(wù)端在其 Samba 數(shù)據(jù)庫中管理用戶帳戶,并為本地 Windows 工作組的成員提供文件共享
SMB 共享目錄的基本步驟如下:
安裝 samba 軟件包
準(zhǔn)備要共享的目錄
配置?/etc/samba/smb.conf?文件
設(shè)置適當(dāng)?shù)?Linux 用戶,并在 Samba 數(shù)據(jù)庫中配置它們
啟動 Samba 并打開防火墻
從客戶端系統(tǒng)掛載 SMB 共享,驗證配置
安裝 Samba 并準(zhǔn)備要共享的目錄
在 Samba 服務(wù)器上安裝 samba 軟件包
[root@host ~]
創(chuàng)建要共享的目錄
[root@host ~]
設(shè)置 Linux 訪問權(quán)限
Samba 將其用戶帳戶映射到 Linux 用戶,可使用 Linux 文件權(quán)限控制對目錄的訪問
[root@host ~]
[root@host ~]
[root@host ~]
SGID位確保新文件自動屬于developers組
設(shè)置 SELinux context 類型
將目錄 context 類型設(shè)為?samba_share_t
[root@host ~]
[root@host ~]
*Samba 還支持使用 SELinux public_content_t(只讀)和public_content_rw_t (讀/寫)type 標(biāo)記的文件。對于public_content_rw_t type,啟用 SELinux smbd_anon_write 布爾值以允許讀/寫訪問。當(dāng)希望 Apache服務(wù)器或 NGINX 能夠提供共享目錄內(nèi)容或?qū)懭氲狡渲袝r,這兩種 SELinux 類型非常有用
配置 Samba
Samba 配置文件是?/etc/samba/smb.conf
/etc/samba/smb.conf 以 [global] 部分開頭。該部分提供常規(guī)配置和默認值,可在后續(xù)部分中覆蓋。下一部分定義文件或打印機共享。; 或 # 表示注釋
配置全局部分
[global] 部分定義 Samba 服務(wù)器的基本配置,主要參數(shù)如下
workgroup:指定服務(wù)器的 Windows 工作組,默認值為WORKGROUP
security:控制 Samba 如何對客戶端進行身份驗證。默認值security = user,客戶端使用本地 Samba 數(shù)據(jù)庫中的用戶名和密碼來登錄
server min protocol:指定服務(wù)端支持的最小 SMB 版本。服務(wù)器默認支持所有版本的協(xié)議,并與客戶端協(xié)商版本。由于第一個版本 SMB1(或 CIFS)存在安全問題,因此紅帽建議將 server min protocol 設(shè)置為 SMB2。但 Microsoft Windows XP 或更早版本的客戶端將無法訪問服務(wù)端,因為它們僅支持 SMB1。SMB 協(xié)議的當(dāng)前版本是 3
smb encrypt:激活流量加密。服務(wù)端和客戶端默認會協(xié)商加密。若要強制加密,將 smb encrypt 設(shè)為 required ,并將server min protocol 設(shè)為 SMB3。只有 SMB3 提供對加密的原生支持。Microsoft Windows 8、Microsoft Windows Server 2012 和更高版本的操作系統(tǒng)支持加密的 SMB3
配置共享部分
在 [global] 部分后面,在自定義部分中定義共享。方括號中定義共享的名稱,此部分中最有用的指令如下
path:在服務(wù)器上共享的目錄名稱
writeable:經(jīng)過身份驗證的用戶對共享的讀/寫訪問權(quán)限(yes 或 no),默認為 no
write list:當(dāng) writeable 設(shè)為 no,可使用 write list 提供具有讀/寫訪問權(quán)限的用戶列表。不在列表中的用戶僅有讀權(quán)限。@字符表示 Linux 組
write list = operator1,
valid users:所有經(jīng)過身份驗證的用戶默認都可以訪問該共享。使用 valid users 限制訪問權(quán)限,用戶列表用逗號分隔
下例定義 devcode 共享,授予對 /srv/smbshare 的訪問權(quán)限。所有經(jīng)過身份驗證的用戶都對共享具有讀權(quán)限,但只有developers 組員具有讀/寫權(quán)限
[devcode]
path = /srv/smbshare
write list = @developers
下例僅 developers 組和 operator1 用戶允許訪問,從而限制對共享的訪問。operator1 僅有讀權(quán)限,因為它不在 write list中
[devcode]
path = /srv/smbshare
valid users = operator1,
write list =
驗證配置文件
運行 testparm 命令驗證 /etc/samba/smb.conf
[root@host ~]# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
Enter
...output omitted...
準(zhǔn)備 Samba 用戶
每個 Samba 帳戶必須有聯(lián)名的 Linux 帳戶。要創(chuàng)建僅限于Samba 的用戶帳戶,需鎖定其 Linux 密碼,并將登錄設(shè)置為/sbin/nologin,防止用戶 ssh 登錄
[root@host ~]
將用戶添加到 Samba 數(shù)據(jù)庫,使用 smbpasswd -a username,命令會提示輸入密碼
[root@host ~]# smbpasswd -a operator1
New SMB password: redhat
Retype new SMB password: redhat
Added user operator1.
若要從 Samba 數(shù)據(jù)庫中刪除用戶,使用 -x 選項
[root@host ~]# smbpasswd -x operator1
Deleted user operator1.
還有更強大的 pdbedit 命令。例如,可使用?pdbedit -L?命令列出 Samba 數(shù)據(jù)庫中的用戶??蓞⒖?pdbedit(8) man page
Samba 數(shù)據(jù)庫在 /var/lib/samba/private/。切勿直接修改該目錄中的文件
啟動 Samba
使用 systemctl 命令啟用并啟動 smb 服務(wù)
[root@host ~]# systemctl enable --now smb
打開 samba firewalld 服務(wù),允許對端口 139/TCP 和端口445/TCP 的訪問
[root@host ~]
[root@host ~]
注:Samba?定期檢查?/etc/samba/smb.conf 是否被更改。如果已更改,則 Samba 自動重新加載配置文件,這將不會影響已經(jīng)建立的連接
掛載 SMB 文件系統(tǒng)
Microsoft Windows 和 Linux 系統(tǒng)均可訪問 SMB 共享
在 Linux 上,安裝?cifsutils 軟件包,可在本地系統(tǒng)上掛載SMB 共享
在 Linux 上,可用 //servername/sharename 表示法訪問共享。標(biāo)準(zhǔn) Microsoft Windows 統(tǒng)一命名約定是\servername\sharename,用于表示網(wǎng)絡(luò)資源。但 \ 在 shell 中是轉(zhuǎn)義符,因此 Linux 改用 / 字符
若要掛載 SMB 共享,必須提供用戶憑據(jù)以向 Samba 服務(wù)器進行身份驗證。這些憑據(jù)決定了對共享上的文件的訪問權(quán)限。
對于手動掛載,可使用 username 掛載選項,會提示用戶輸入密碼
[root@host ~]# mount -o username=operator1 //host.example.com/devcode /mnt
Password for operator1@//host.example.com/devcode: redhat
若要自動掛載,在 /etc/fstab 添加?credentials 選項
//host.exmaple.com/devcode /data cifs credentials=/etc/samba/credentials 0 0
憑據(jù)文件包含用戶名和密碼
[root@host ~]# cat /etc/samba/credentials
username=operator1
password=redhat
由于憑據(jù)文件包含密碼,請將文件存儲在安全目錄中,并限制其訪問權(quán)限
[root@host ~]
[root@host ~]
請求加密:
若要強制 SMB 流量加密,將?seal 選項與 mount 命令配合使用
//host.example.com/devcode /data cifs credentials=/etc/samba/credentials,seal 0 0
執(zhí)行多用戶 SMB 掛載
當(dāng)使用 credentials 或 username 選項掛載 SMB 共享時,憑據(jù)由本地系統(tǒng)上的所有用戶使用
理想情況下,希望每個用戶使用自己的 SMB 憑據(jù)來確定對共享的訪問權(quán)限。可以、使用 multiuser 掛載選項
在使用 multiuser 時,可讓 root 用戶使用對共享具有最少訪問權(quán)限的憑據(jù)。當(dāng)用戶登錄時,他們使用 cifscreds 命令將他們的SMB 密碼臨時添加到安全內(nèi)核密鑰環(huán)中。然后,客戶端的Linux 內(nèi)核將使用其 SMB 憑據(jù)來確定對共享的訪問權(quán)限,而不是 root 的憑據(jù)。
下列步驟描述了 multiuser 選項的系統(tǒng)配置:
創(chuàng)建用于掛載 SMB 共享的憑據(jù)文件。憑據(jù)文件中的默認用戶須具有對 SMB 共享的最少訪問權(quán)限(讀取權(quán)限)
將 multiuser 選項添加到加載命令。以下 /etc/fstab 條目使用credentials 和 multiuser 選項
//host.example.com/devcode /data cifs credentials=/etc/samba/credentials,multiuser 0 0
使用 mount 命令掛載 SMB 共享
在訪問掛載點之前,用戶應(yīng)運行 cifscreds 命令以提供其憑據(jù)
[developer@client ~]$ cifscreds add host.example.com
Password: redhat
cifscreds 的 add 子命令將 SMB 憑據(jù)加載到內(nèi)核密鑰環(huán)。clear 子命令將用戶憑據(jù)從特定主機的內(nèi)核密鑰環(huán)中刪除。update 子命令可將內(nèi)核密鑰環(huán)中的憑據(jù)替換為新用戶和密碼的憑據(jù)
參考文檔:samba(7)、smb.conf(5)、testparm(1)、smbpasswd(8)、pdbedit(8)、mount.cifs(8) 和 cifscreds(1) manpage
podman
什么是 Podman
Podman 是一個開源的容器運行時項目,可在大多數(shù) Linux 平臺上使用。Podman 提供與 Docker 非常相似的功能。正如前面提到的那樣,它不需要在你的系統(tǒng)上運行任何守護進程,并且它也可以在沒有 root 權(quán)限的情況下運行。
Podman 可以管理和運行任何符合 OCI(Open Container Initiative)規(guī)范的容器和容器鏡像。Podman 提供了一個與 Docker 兼容的命令行前端來管理 Docker 鏡像。
安裝 Podman
Podman 目前已支持大多數(shù)發(fā)行版本通過軟件包來進行安裝,下面我們來舉幾個常用發(fā)行版本的例子。
Fedora / CentOS
$ sudo yum -y install podman
Ubuntu
$ sudo apt-get update -qq$ sudo apt-get install -qq -y software-properties-common uidmap$ sudo add-apt-repository -y ppa:projectatomic/ppa$ sudo apt-get update -qq$ sudo apt-get -qq -y install podman
MacOS
$ brew cask install podman
RHEL 7
$ sudo subscription-manager repos --enable=rhel-7-server-extras-rpms$ sudo yum -y install podman
Arch Linux
$ sudo pacman -S podman
更多系統(tǒng)的安裝方法,可參考官方文檔:https://github.com/containers/libpod/blob/master/install.md
使用 Podman
運行一個容器
$ podman run -dt -p 8080:8080/tcp \-e HTTPD_VAR_RUN=/var/run/httpd \-e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \-e HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \-e HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/httpd/ \registry.fedoraproject.org/f27/httpd /usr/bin/run-httpd
列出運行的容器
$ podman ps -a
分析一個運行的容器
$ podman inspect -l | grep IPAddress\":"SecondaryIPAddresses": null,"IPAddress": "",
查看一個運行中容器的日志
$ sudo podman logs --latest10.88.0.1 - - [07/Feb/2018:15:22:11 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
查看一個運行容器中的進程資源使用情況
$ sudo podman top <container_id> UID PID PPID C STIME TTY TIME CMD 0 31873 31863 0 09:21 ? 00:00:00 nginx: master process nginx -g daemon off; 101 31889 31873 0 09:21 ? 00:00:00 nginx: worker process
停止一個運行中的容器
$ sudo podman stop --latest
刪除一個容器
$ sudo podman rm --latest
以上這些特性基本上都和 Docker 一樣,Podman 除了兼容這些特性外,還支持了一些新的特性。
給容器設(shè)置一個檢查點
根據(jù)檢查點位置恢復(fù)容器
遷移容器
配置別名
Podman 如何實現(xiàn)開機重啟容器
參考
Podman解析?https://www.jianshu.com/p/3fc6eff747ab
KVM
KVM
KVM是linux內(nèi)核的模塊,它需要CPU的支持,采用硬件輔助虛擬化技術(shù)Intel-VT,AMD-V,內(nèi)存的相關(guān)如Intel的EPT和AMD的RVI技術(shù),Guest OS的CPU指令不用再經(jīng)過Qemu轉(zhuǎn)譯,直接運行,大大提高了速度,KVM通過/dev/kvm暴露接口,用戶態(tài)程序可以通過ioctl函數(shù)來訪問這個接口。
QEMU
Qemu是一個模擬器,它向Guest OS模擬CPU和其他硬件,Guest OS認為自己和硬件直接打交道,其實是同Qemu模擬出來的硬件打交道,Qemu將這些指令轉(zhuǎn)譯給真正的硬件。
qemu-kvm
Qemu將KVM整合進來,通過ioctl調(diào)用/dev/kvm接口,將有關(guān)CPU指令的部分交由內(nèi)核模塊來做。kvm負責(zé)cpu虛擬化+內(nèi)存虛擬化,實現(xiàn)了cpu和內(nèi)存的虛擬化,但kvm不能模擬其他設(shè)備。qemu模擬IO設(shè)備(網(wǎng)卡,磁盤等),kvm加上qemu之后就能實現(xiàn)真正意義上服務(wù)器虛擬化。因為用到了上面兩個東西,所以稱之為qemu-kvm。
libvirt
libvirt是目前使用最為廣泛的對KVM虛擬機進行管理的工具和API。Libvirtd是一個daemon進程,可以被本地的virsh調(diào)用,也可以被遠程的virsh調(diào)用,Libvirtd調(diào)用qemu-kvm操作虛擬機。
virt-manager
virt-manager是用于管理KVM虛擬環(huán)境的主要工具,virt-manager默認設(shè)置下需要使用root用戶才能夠使用該工具。當(dāng)你想在KVM hypervisor服務(wù)器上托管虛擬機,由最終用戶而非root用戶訪問這些虛擬機時并不總是很便利。
WebVirtMgr
WebVirtMgr采用幾乎純Python開發(fā),其前端是基于Python的Django,后端是基于Libvirt的Python接口,將日常kvm的管理操作變的更加的可視化。
Aria2
Aria2是一款開源下載工具,可幫助簡化不同設(shè)備和服務(wù)器之間的下載過程。它支持磁力鏈接、BT種子、http等類型的文件下載,與迅雷及QQ旋風(fēng)相比,Aria2有著優(yōu)秀的性能及較低的資源占用,架構(gòu)本身非常輕巧,通常只需要4兆字節(jié)(HTTP下載)到9兆字節(jié)(用于BitTorrent交互)之間。
Jellyfin
Plex、Emby、Jellyfin是功能類似的三款媒體影音管理軟件,支持多平臺、刮削影片生成海報墻顯示豐富的電影信息、在服務(wù)器端存儲資料信息,實現(xiàn)多設(shè)備同步觀影進程、遠程播放、為播放端硬件轉(zhuǎn)碼視頻等。