linux存儲共享
A. 探討一下 linux 共享內存的 N 種方式
關於 Linux 共享內存,寫得最好的應該是宋寶華的 《世上最好的共享內存》 一文。
本文可以說是對這篇文章的學習筆記,順手練習了一下 rust libc —— shichaoyuan/learn_rust/linux-shmipc-demo
按照宋寶華的總結,當前有四種主流的共享內存方式:
前兩種方式比較符合傳統的用法,共享內存做為進程間通信的媒介。
第三種方式更像是通過傳遞內存「句柄」進行數據傳輸。
第四種方式是為設備間傳遞數據設計,避免內存拷貝,直接傳遞內存「句柄」。
這里嘗試了一下第二種和第三種方式。
這套 API 應該是最普遍的 —— shm_open + mmap,本質上來說 Aeron 也是用的這種方式(關於 Aeron 可以參考 我之前的文章 )。
看一下 glibc 中 shm_open 函數的實現就一清二楚了:
shm_open 函數就是在 /dev/shm 目錄下建文件,該目錄掛載為 tmpfs,至於 tmpfs 可以簡單理解為存儲介質是內存的一種文件系統,更准確的理解可以參考官方文檔 tmpfs.txt 。
然後通過 mmap 函數將 tmpfs 文件映射到用戶空間就可以隨意操作了。
優點:
這種方式最大的優勢在於共享的內存是有「實體」(也就是 tmpfs 中的文件)的,所以多個進程可以很容易通過文件名這個信息構建共享內存結構,特別適合把共享內存做為通信媒介的場景(例如 Aeron )。
缺點:
如果非要找一個缺點的話,可能是,文件本身獨立於進程的生命周期,在使用完畢後需要注意刪除文件(僅僅 close 是不行的),否則會一直佔用內存資源。
memfd_create 函數的作用是創建一個匿名的文件,返回對應的 fd,這個文件當然不普通,它存活在內存中。更准確的理解可以參考官方文檔 memfd_create(2) 。
直觀理解,memfd_create 與 shm_open 的作用是一樣的,都是創建共享內存實體,只是 memfd_create 創建的實體是匿名的,這就帶了一個問題:如何讓其它進程獲取到匿名的實體?shm_open 方式有具體的文件名,所以可以通過打開文件的方式獲取,那麼對於匿名的文件怎麼處理呢?
答案是:通過 Unix Domain Socket 傳遞 fd。
rust 的 UDS 實現:
rust 在 std 中已經提供了 UDS 的實現,但是關於傳遞 fd 的 send_vectored_with_ancillary 函數還屬於 nightly-only experimental API 階段。所以這里使用了一個三方 crate —— sendfd ,坦白說可以自己實現一下,使用 libc 構建好 SCM_RIGHTS 數據,sendmsg 出去即可,不過細節還是挺多,我這里就放棄了。
這套 API 設計更靈活,直接拓展了我的思路,本來還是受限於 Aeron 的用法,如果在這套 API 的加持下,是否可以通過傳遞數據包內存塊(fd)真正實現零拷貝呢?
優點:
靈活。
缺點:
無
B. 如何在linux系統里訪問windows的磁碟共享文件
1、首先,通過DB server將SAN存儲中開辟一個10T的存儲空間,並將其格式化為NTFS的文件系統。此時,這個10T的存儲區域相當於這個DB server的一個磁碟,並且文件系統為NTFS。
2、下面就是如何談論的就是如何在linux系統中,訪問windows的磁碟?
這里採用的方案是通過在linux上安裝samba和mount。以下是具體的實現方法:
(1)首先,需要Windows上對磁碟進行網路映射。將Windows的磁碟共享即可(屬性-共享-高級共享,增加一個共享名即可)
在這里我們是將Window下的F盤進行共享,通過增加一個共享名稱為Share。
(2)然後,在Linux下安裝一些小的功能:
yum install mount
yum install samba
(3)mount -t cifs -o username=administrator,password=Passw0rd! //192.168.2.246/Share /mnt/share
其中,//192.168.2.246/Share代表網路映射位置(就是你windows機器的ip地址和共享文件夾名), /mnt/share代表Linux下的文件夾位置(需要實現創建一個空的文件夾)。
(4)如果每次開機就希望該分區已經載入了,那麼可以執行如下的步驟:
編輯文件:gedit /etc/fstab 或者 vi /etc/fstab
在文件末尾添加一行:
//192.168.2.246/Share /mnt/share cifs defaults,auto,username=administrator,password=Passw0rd!
其中username和password就是Linux的用戶名密碼
然後重啟或者輸入sudo mount -a即可~
(5)最後可以通過執行:df -h 來查看是否載入成功。更多Linux介紹可查看《Linux就該這么學》。
C. linux查看共享內存命令
共享內存查看
使用ipcs命令,不加如何參數時,會把共享內存、信號量、消息隊列的信息都列印出來,如果只想顯示共享內存信息,使用如下命令:
[root@localhost ~]# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 1867776 root 600 393216 2 dest
0x00000000 1900545 root 600 393216 2 dest
0x00030021 1703938 zc 666 131104 1
0x0003802e 1736707 zc 666 131104 1
0x00030004 1769476 zc 666 131104 1
0x00038002 1802245 zc 666 131104 1
0x00000000 1933318 root 600 393216 2 dest
0x00000000 1966087 root 600 393216 2 dest
0x00000000 1998856 root 600 393216 2 dest
0x00000000 2031625 root 600 393216 2 dest
0x00000000 2064394 root 600 393216 2 dest
0x0014350c 2261003 cs 666 33554432 2
0x00000000 2129932 root 600 393216 2 dest
0x00000000 2162701 root 600 393216 2 dest
0x00143511 395837454 root 666 1048576 1
其中:
第一列就是共享內存的key;
第二列是共享內存的編號shmid;
第三列就是創建的用戶owner;
第四列就是許可權perms;
第五列為創建的大小bytes;
第六列為連接到共享內存的進程數nattach;
第七列是共享內存的狀態status。其中顯示「dest」表示共享內存段已經被刪除,但是還有用戶在使用它,當該段內存的mode欄位設置為SHM_DEST時就會顯示「dest」。當用戶調用shmctl的IPC_RMID時,內存先查看多少個進程與這個內存關聯著,如果關聯數為0,就會銷毀這段共享內存,否者設置這段內存的mod的mode位為SHM_DEST,如果所有進程都不用則刪除這段共享內存。
D. linux怎樣設置共享緩存
當在Linux下頻繁存取文件後,物理內存會很快被用光,當程序結束後,內存不會被正常釋放,而是一直作為caching。這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法。那麼我來談談這個問題。
一、通常情況
先來說說free命令:
# free -m
total used free shared buffers cached
Mem: 249 163 86 0 10 94
-/+ buffers/Cache: 58 191
SWAP: 511 0 511
其中:
total 內存總數
used 已經使用的內存數
free 空閑的內存數
shared 多個進程共享的內存總額
buffers buffer Cache和cached Page Cache 磁碟緩存的大小
-buffers/cache (已用)的內存數:used - buffers - cached
+buffers/cache(可用)的內存數:free + buffers + cached
可用的memory=free memory+buffers+cached
有了這個基礎後,可以得知,我現在used為163MB,free為86MB,buffer和cached分別為10MB,94MB。
那麼我們來看看,如果我執行復制文件,內存會發生什麼變化。
# cp -r /etc ~/test/
# free -m
total used free shared buffers cached
Mem: 249 244 4 0 8 174
-/+ buffers/cache: 62 187
Swap: 511 0 511
在我命令執行結束後,used為244MB,free為4MB,buffers為8MB,cached為174MB,天吶,都被cached吃掉了。別緊張,這是為了提高文件讀取效率的做法。
為了提高磁碟存取效率,Linux做了一些精心的設計,除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換),還採取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁碟塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。
那麼有人說過段時間,linux會自動釋放掉所用的內存。等待一段時間後,我們使用free再來試試,看看是否有釋放?
# free -m
total used free shared buffers cached
Mem: 249 244 5 0 8 174
-/+ buffers/cache: 61 188
Swap: 511 0 511
似乎沒有任何變化。(實際情況下,內存的管理還與Swap有關)那麼我能否手動釋放掉這些內存呢?回答是可以的!
E. 虛擬機linux共享文件夾在哪
虛擬機linux共享文件夾在設置保存的文件家中,查看虛擬機linux共享文件夾的操作步驟如下:
1、首先,打開一個的VMware軟體,並是已經安裝好一個虛擬的系統,點擊編輯虛擬機設置。
F. vmware虛擬化怎麼給兩台linux虛擬機做共享存儲
使用windows的CMD程序操作,進入vmware的安裝目錄,然後執行:
CMD> vmware-vdiskmanager.exe # 不加任何參數會顯示完整的幫助信息。
CMD> vmware-vdiskmanager.exe -c -s 200Mb -a ide -t 0 disk.vmdk
這樣就生成了一個新的(-c參數),200Mb大小(-s 200Mb),IDE介面(-a ide)的名為'disk.vmdk'磁碟。
關於'-t 0'的含義,請參考該命令的幫助信息。
G. 如何設置LINUX的共享內存
我們可以修改shmmax內核參數,使SGA存在於一個共享內存段中。
通過修改/proc/sys/kernel/shmmax參數可以達到此目的。
[root@neirong root]# echo 1073741824 > /proc/sys/kernel/shmmax
[root@neirong root]# more /proc/sys/kernel/shmmax
1073741824這里設為1G。
對於shmmax文件的修改,系統重新啟動後會復位。可以通過修改 /etc/sysctl.conf 使更改永久化。
在該文件內添加以下一行 kernel.shmmax = 1073741824 這個更改在系統重新啟動後生效.
1、設置 SHMMAX
SHMMAX
參數定義共享內存段的最大尺寸(以位元組為單位)。在設置 SHMMAX 時,切記 SGA 的大小應該適合於一個共享內存段。 SHMMAX 設置不足可能會導致以下問題:
ORA-27123:unable to attach to shared memory segment
您可以通過執行以下命令來確定 SHMMAX 的值:
# cat /proc/sys/kernel/shmmax
33554432
SHMMAX 的默認值是 32MB 。我一般使用下列方法之一種將 SHMMAX 參數設為 2GB :
通過直接更改 /proc 文件系統,你不需重新啟動機器就可以改變 SHMMAX 的默認設置。我使用的方法是將以下命令放入 /etc/rc.local 啟動文件中:
# >echo "2147483648" > /proc/sys/kernel/shmmax
您還可以使用 sysctl 命令來更改 SHMMAX 的值:
# sysctl -w kernel.shmmax=2147483648
最後,通過將該內核參數插入到 /etc/sysctl.conf 啟動文件中,您可以使這種更改永久有效:
# echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf
2、設置 SHMMNI
我們現在來看 SHMMNI 參數。這個內核參數用於設置系統范圍內共享內存段的最大數量。該參數的默認值是 4096 。這一數值已經足夠,通常不需要更改。
您可以通過執行以下命令來確定 SHMMNI 的值:
# cat /proc/sys/kernel/shmmni
4096
3、設置 SHMALL
最後,我們來看 SHMALL 共享內存內核參數。該參數控制著系統一次可以使用的共享內存總量(以頁為單位)。簡言之,該參數的值始終應該至少為:
ceil(SHMMAX/PAGE_SIZE)
SHMALL 的默認大小為 2097152 ,可以使用以下命令進行查詢:
# cat /proc/sys/kernel/shmall
2097152
SHMALL 的默認設置對於我們的 Oracle9 i RAC 安裝來說應該足夠使用。
注意: 在 i386 平台上 Red Hat Linux 的 頁面大小 為 4096 位元組。但是,您可以使用 bigpages ,它支持配置更大的內存頁面尺寸。
H. linux共享憑據保存在哪裡
linux共享憑據保存在共享庫。在Linux下,共享庫的尋找和載入是由lib/ld.so實現的。(在機器里找到了/lib/ld-2.22.so,是這個)ld.so在標凱野巧准路徑。直接在用戶@unbuntu輸入:/mnt/hgfs/cd/mnt/hgfs/share就可以看脊型見一個share的文盯鍵件,在windows裡面放的文件,可以直接在裡面顯示出來。
I. linux 怎樣建立所有使用者共享資料夾
linux 怎樣建立所有使用者共享資料夾
Linux下給新使用者建立檔案和目錄許可權,只需要新增該使用者到希望他建立檔案和目錄的使用者組里即可,案例如下:案例:希望新建使用者admin,能在/目錄下建立檔案和目錄。1.在/目錄下用ls命令檢視目錄的組使用者許可權
1
2
ls -l
#檢視所屬的使用者和組,並可以檢視組使用者的許可權
2.修改使用者admin對資料夾的許可權
1
2
3
chmod 777
gpasswd -a admin admin
#可以將使用者admin新增到使用者組里
這樣新建的使用者admin,便能在/這個目錄下擁有建立檔案和目錄的許可權了。
怎樣建立共享資料夾
右擊要共享的資料夾,選擇「共享和安全」,然後點選共享,進行必要的設定就可以了。
怎樣建立局網共享資料夾
首先保證你的區域網是通的!
然後選擇需要共享的資料夾或磁碟,右鍵--共享與安全。。。。這樣就搞定了。。
切記:一定要開啟GUEST使用者的許可權,不然可能需要密碼才能訪問比較麻煩!·
1.啟用來賓帳戶。 「控制面板-使用者帳戶-啟用來賓帳戶」 2.安裝NetBEUI協議。 檢視「網路上的芳鄰」屬性——檢視「本地連線」屬性——點選「安裝」——檢視 「協議」——看其中NetBEUI協議是否存在,如果存在則安裝這個協議,如果不存在則表明已經安裝了該 協議,在Winxp系統預設的情況下該協議是已經安裝好了的。 3.檢視本地安全策略設定是否禁用了GUEST賬號。 控制面板——管理工具——本地安全策略——使用者權利指派——檢視「拒絕從網路訪問這台計算機」項的屬性——看裡面是否有GUEST帳戶,如果有就把它刪除掉。 4.設定共享資料夾。 你如果不設定共享資料夾的話,網內的其它機器無法訪問到你的機器。設定資料夾共享的方法有三種,第一種是:「工具--資料夾選項--檢視--使用簡單資料夾共享」。這樣設定後,其他使用者只能以Guest使用者的身份訪問你共享的檔案或者是資料夾。第二種方法是:「控制面板--管理工具--計算機管理」,在「計算機管理」這個對話方塊中,依次點選「資料夾共享--共享」,然後在右鍵中選擇「新建共享」即可。第三種方法最簡單,直接在你想要共享大游磨的資料夾上點選右鍵,通過「共享和安全」選項即可設定共享。 5.建立工作組。 在Windows桌面上用右滾斗鍵點選「我的電腦」,選擇「屬性」,然後單擊「計算機名」選項卡,看看該選項卡中有沒有出現你的區域網工作組名稱,如「workgroup」等。然後單擊「網路 ID」按鈕,開始「網路標識向導」:單擊「下一步」,選擇「本機是商業網路的一部分,用它連線到其他工作著的計算機」;單擊「下一步」,選擇「公司使用沒有域的網路」;單擊「下一步」按鈕,然後輸入你的區域網的工作組名,這里我建議大家用「BROADVIEW」,再次單擊「下一步」按鈕,最後單擊「完成」按鈕完成設定。 重新啟動計算機後,區域網內的計算機就可以互訪了。 6.檢視「計算機管理」是否啟用來賓帳戶。 控制面版——計算機管理——本地使用者和組——使用者——啟用來賓帳戶。機器重新啟動後就可以了。 如果大家想提高訪問別人機器的速度的話,還可以做一些相關操作:控制面版——管理工具——服務——Task Scheler——屬性——啟動方式改為手動,這樣就可以了。 7.使用者權利指派。 「控制面板--管理工具--本地安全策略」,在「本地安全策略」對話方塊中,依次選擇「本地策略--使用者權利指派」,在右邊的選項中依次對「從網路上訪問這台計算機」和「拒絕從網路上訪問這台計算機」這兩個選項進行設定。 「從網路上訪問這台計算機」選項需要將guest使用者和everyone新增進去;「拒絕從網路上訪問這台計算機」需要將被拒絕的所有使用者刪除掉,預設情況下guest是被拒絕訪問的。 但是只要你的區域網出現了不能訪問的現象,通過上述設定肯磨薯定能保證區域網的暢通
virtualbox怎麼建立共享資料夾
關鍵字:VirtualBox 共享資料夾 設定 使用 與主機共享檔案
用過vmware的都知道,vmware有個vmware tools增強工具,安裝後可以滑鼠鍵盤在主機與虛擬機器之間無縫切換,還能無縫拷貝檔案,共享剪貼簿.但問題是有付費,價格還挺高...
VirtualBox的好處就是免費開源,但功能比之vmware著實要弱上不少,比如與主機共享檔案能力就比較弱,這里介紹一種使用共享資料夾方式來達到主機及虛擬機器共享檔案的目的.
windows系統電腦
VirtualBox
已安裝好的虛擬作業系統
1
說明:我這里虛擬機器裝的是Ubuntu14.04LTS,但據我觀察換成其它不管是LINUX還是WINDOWS系統,操作都大同小異,95%是相同的.
2
開啟VirtualBox虛擬機器,點選工具欄中"設定"按鈕
3
在彈出的視窗中點選左邊的"共享資料夾"標簽
4
在"共享資料夾"標簽頁中,在"固定分配"項上右擊,選擇"新增共享資料夾"
5
彈出"共享資料夾"對話方塊,按下圖設定好(選擇共享資料夾路徑及名稱,並勾選"自動掛載")
啟動虛擬機器,點選"裝置"選單,並選擇"安裝增強功能..."選單項
之後系統會將安裝軟體掛載到光碟機,並且光碟機會自動執行,彈出如下提示,請點選"Run",讓它自動安裝.
如果你的光碟機沒有自動執行,或者自動安裝出錯,或者你想手動安裝,可以在左側快速啟動欄點選光碟機圖示,或者在檔案管理器中點選Devices下的"VBOXADDITIO..."開啟光碟,將其中內容復制到比如桌面某個資料夾,
光碟中的內容如下:
開啟終端(快遞鍵:CTRL+ALT+T),輸入如圖命令:
chmod 777 VBoxLinuxAdditions-x86.run
然後執行安裝程式:
sudo sh ./VBoxLinuxAdditions-x86.run
安裝成功後會有如下提示:
Installing graphics libraries and desk services ponents ...done.
把當前登入到ubuntu系統的使用者新增到vboxsf組,例如我的使用者名稱是fiyang,在終端中執行以下命令:
sudo usermod -G vboxsf fiyang
之後進入/media目錄,會發現之前設定 *** 享的資料夾赫然在列(前面會多出個sf_的字首)
在WIN7系統的主機中,在共享資料夾加新增一個檔案
去虛擬機器UBUNTU系統中看下共享資料夾,
16
果然能看到主機中復制的檔案了,至此,共享資料夾設定完成^_^
用VMware虛擬Linux時如何建立共享資料夾?
首先要有確定你裝了samba伺服器
然後確定linux和windows是可以ping通的,並且兩者屬於同一工作組
在windows中設定的共享資料夾linux下可以用 *** bclient命令進行訪問
在samba伺服器的主配置檔案/etc/samba/ *** b.conf中定義要共享的小節即可
怎樣建共享資料夾
右建要共享的資料夾,如果是XP系統,點共享和安全就行了。裡面有設定的
共享是說在網上的所有使用者都能訪問我的共享資料夾嗎?
不是,是在同一個工作組或者域裡面的使用者可以。
windows怎樣訪問linux共享資料夾
在Linux下訪問Windows共享目錄的配置方法
1、在Windows上設定一個共享目錄
如:將d:RedHat_disk設定為共享目錄
2、在Windows上建立一個使用者,如tommy,密碼111111
3、將tommy使用者加入到共享目錄d:
edhat_disk的訪問組中,並設定tommy
對該共享目錄有完全控制許可權(讀、寫)
4、在Linux下安裝samba-client客戶端
# yum install samba-client
5、安裝cifs-utils軟體包
# yum install cifs-utils
6、在Linux下建立一個掛載點
# mkdir /mnt/Windows
7、掛載Windows上的共享目錄d:
edhat_disk到Linux下的/mnt/Windows目錄下
# mount -t cifs -o username=tommy 192.168.1.123/redhat_disk /mnt/Windows
Enter password: 111111
8、如果掛載成功,則可以進入/mnt/Windows下,新建一個檔案,看看Windows上能否看見
9、在/etc/fstab檔案中,加入該共享目錄的掛載資訊
192.168.1.123/redhat_disk /mnt/Windows cifs username=tommy,password=111111 0 0
10、到此為止,Windows上的共享目錄192.168.1.123/redhat_disk就被成功掛載到了Linux上面了,並且Linux重啟後,會自動掛載該目錄到/mnt/Windows目錄下
怎樣共享資料夾
設定如下:
控制面板→管理工具→本地安全策略→本地策略→安全選項,右邊找到「網路訪問: 不允許 SAM 帳戶和共享的匿名列舉」這個禁用,「網路訪問: 本地帳戶的共享和安全模型」選僅來賓,還有最下邊的「賬戶:來賓賬戶狀態」要啟用,以及「帳戶: 使用空白密碼的本地帳戶只允許進行控制台登入」禁用。然後切換到本地策略→使用者權利指派,右邊找到「拒絕從網路訪問這台計算機」,點選去,裡面要是有guest,刪掉,沒有就算了。做完這些系統就開放共享了,但是要重啟一下電腦來確保設定生效。重啟之後就是看要共享哪些檔案夾了,右鍵點要共享的資料夾,
選「共享與安全」就會看到相關選項。共享許可權很簡單,開了共享之後就剩下是否允許修改了,樓主自行設定。
登陸共享主機的方法是在執行裡面輸入「\某某的電腦」或者是「\192.168.1.2」,這只是例子,相應的計算機名或IP自行填寫。
J. linux伺服器裝了oracle,共享存儲是什麼意思簡單舉個例子說明下
共享存儲主要用於RAC架構下的
單節點資料庫,如果實例宕機了,如果一個業務、在實例上面,那麼這個業務就中斷了。這個時候系統就不具有可用性了,那麼這個時候單節點的可用性是很差的。
RAC不能夠解決在數據的安全,盡管有多個實例,但是只有一份數據文件,這樣只要數據文件損壞了,那麼整個資料庫就損壞了。