磁碟空間管理
系統軟體和應用軟體,都要以文件的形式存儲在計算機的磁碟空間中。因此,應該隨時監視磁碟空間的使用情況。Linux系統提供了一組有關磁碟空間管理的命令。
df命令
功能:檢查文件系統的磁碟空間佔用情況。可以利用該命令來獲取硬碟被佔用了多少空間,目前還剩下多少空間等信息。
語法:df [選項]
說明:df命令可顯示所有文件系統對i節點和磁碟塊的使用情況。
該命令各個選項的含義如下:
-a 顯示所有文件系統的磁碟使用情況,包括0塊(block)的文件系統,如/proc文件系統。
-k 以k位元組為單位顯示。
-i 顯示i節點信息,而不是磁碟塊。
-t 顯示各指定類型的文件系統的磁碟空間使用情況。
-x 列出不是某一指定類型文件系統的磁碟空間使用情況(與t選項相反)。
-T 顯示文件系統類型。
例1:列出各文件系統的磁碟空間使用情況。
$ df
Filesystem 1 K-blocks Used Available Use% Mounted on
/dev/hda2 1361587 1246406 44823 97% /
df命令的輸出清單的第1列是代表文件系統對應的設備文件的路徑名(一般是硬碟上的分區);第2列給出分區包含的數據塊(1024位元組)的數目;第3,4列分別表示已用的和可用的數據塊數目。用戶也許會感到奇怪的是,第3,4列塊數之和不等於第2列中的塊數。這是因為預設的每個分區都留了少量空間供系統管理員使用。即使遇到普通用戶空間已滿的情況,管理員仍能登錄和留有解決問題所需的工作空間。清單中Use% 列表示普通用戶空間使用的百分比,即使這一數字達到100%,分區仍然留有系統管理員使用的空間。最後,Mounted on列表示文件系統的安裝點。
例2:列出各文件系統的i節點使用情況。
$ df -ia
Filesystem Inodes IUsed IFree Iused% Mounted on
/dev/ hda2 352256 75043 277213 21% /
none 0 0 0 0% /proc localhost:(pid221) 0 0 0 0% /net
例3:列出文件系統的類型。
$ df -T
Filesystem Type 1K-blocks Used Available use% Mounted on
/dev/hda2 ext2 1361587 1246405 44824 97% /
本例中的文件系統是ext2類型的。
命令
的英文原義為「disk usage」,含義為顯示磁碟空間的使用情況。
功能:統計目錄(或文件)所佔磁碟空間的大小。
語法: [選項] [Names…]
說明:該命令逐級進入指定目錄的每一個子目錄並顯示該目錄佔用文件系統數據塊(1024位元組)的情況。若沒有給出Names,則對當前目錄進行統計。
該命令的各個選項含義如下:
-s 對每個Names參數只給出佔用的數據塊總數。
-a 遞歸地顯示指定目錄中各文件及子孫目錄中各文件佔用的數據塊數。若既不指定-s,也不指定-a,則只顯示Names中的每一個目錄及其中的各子目錄所佔的磁碟塊數。
-b 以位元組為單位列出磁碟空間使用情況(系統預設以k位元組為單位)。
-k 以1024位元組為單位列出磁碟空間使用情況。
-c 最後再加上一個總計(系統預設設置)。
-l 計算所有的文件大小,對硬鏈接文件,則計算多次。
-x 跳過在不同文件系統上的目錄不予統計。
下面舉例說明命令的使用:
例1:查看/mnt目錄佔用磁碟空間的情況。
$ cd /mnt $ ls -lFR total 10 -rwxrwxrwx 2 root root ll0 Ju1 3l 00:33 aa*
drwxr-xr-x 2 root root l024 Ju1 20 14:16 dev/
-rw-r--r-- 1 root root 6229 Aug 2 0l:39 s1ack
drwxrwxrwx 2 root root 1024 Aug 2 02:09 var/
1rwxrwxrwx 1 root root l0 Aug 2 0l:51 wei->/home/wei/
dev:
tota1 0
lrwxrwxrwx 1 root root 8 Ju1 20 l4:l6 cdrom->/dev/hdb
var:
tata1 37
-r-xr-xr-x l root root 36064 Aug 2 02:09 rawrite. exe*
例2:列出各目錄所佔的磁碟空間,但不詳細列出每個文件所佔的空間。
$
l . /dev
38 . /var
48 .
輸出清單中的第一列是以塊為單位計的磁碟空間容量,第二列列出目錄中使用這些空間的目錄名稱。 注意不帶選項的命令將從當前目錄開始沿著目錄結構向下工作直到列出所有目錄的容量為止。這可能是一個很長的清單,有時只需要一個總數。這時可在命令中加-s選項來取得總數:
$ –s /mnt
/mnt
例3:列出所有文件和目錄所佔的空間(使用a選項),而且以位元組為單位(使用b選項)來計算大小。
$ -ab
8 ./dev/cdrom
l032 ./dev
36064 ./var/rawrite. exe
37088 ./var
6229 ./s1ack
1l0 ./aa
l0 ./wei
45493 .
磁 盤 操 作
dd命令
功能:把指定的輸入文件拷貝到指定的輸出文件中,並且在拷貝過程中可以進行格式轉換。可以用該命令實現DOS下的disk命令的作用。先用dd命令把軟盤上的數據寫成硬碟的一個寄存文件,再把這個寄存文件寫入第二張軟盤上,完成disk的功能。需要注意的是,應該將硬碟上的寄存文件用rm命令刪除掉。系統默認使用標准輸入文件和標准輸出文件。
語法:dd [選項]
if =輸入文件(或設備名稱)。
of =輸出文件(或設備名稱)。
ibs = bytes 一次讀取bytes位元組,即讀入緩沖區的位元組數。
skip = blocks 跳過讀入緩沖區開頭的ibs*blocks塊。
obs = bytes 一次寫入bytes位元組,即寫入緩沖區的位元組數。
bs = bytes 同時設置讀/寫緩沖區的位元組數(等於設置ibs和obs)。
cbs = byte 一次轉換bytes位元組。
count=blocks 只拷貝輸入的blocks塊。
conv = ASCII 把EBCDIC碼轉換為ASCIl碼。
conv = ebcdic 把ASCIl碼轉換為EBCDIC碼。
conv = ibm 把ASCIl碼轉換為alternate EBCDIC碼。
conv = block 把變動位轉換成固定字元。
conv = ublock 把固定位轉換成變動位。
conv = ucase 把字母由小寫轉換為大寫。
conv = lcase 把字母由大寫轉換為小寫。
conv = notrunc 不截短輸出文件。
conv = swab 交換每一對輸入位元組。
conv = noerror 出錯時不停止處理。
conv = sync 把每個輸入記錄的大小都調到ibs的大小(用NUL填充)。
例1:要把一張軟盤的內容拷貝到另一張軟盤上,利用/tmp作為臨時存儲區。把源盤插入驅動器中,輸入下述命令:
$ dd if =/dev/fd0 of = /tmp/tmpfile
拷貝完成後,將源盤從驅動器中取出,把目標盤插入,輸入命令:
$ dd if = /tmp/tmpfile of =/dev/fd0
軟盤拷貝完成後,應該將臨時文件刪除:
$ rm /tmp/tmpfile
例2:把net.i這個文件寫入軟盤中,並設定讀/寫緩沖區的數目。 (注意:軟盤中的內容會被完全覆蓋掉)
$ dd if = net.i of = /dev/fd0 bs = 16384
例3:將文件sfile拷貝到文件 dfile中。
$ dd if=sfile of=dfile
fdformat 命令
軟盤是用戶常用的存儲介質之一。軟盤在使用之前必須先作格式化操作,然後可以用tar、dd、cpio等命令存儲數據,也可以在軟盤上建立可安裝的文件系統。
功能:低級格式化軟盤
語法:format [-n] device
說明:該命令的作用是對軟盤進行格式化。
-n 軟盤格式化後不作檢驗。
device 指定要進行格式化的設備,通常是下述設備之一:
/dev/fd0d360
/dev/fd0h1200
/dev/fd0D360
/dev/fd0H360
/dev/fd0D720
/dev/fd0H720
/dev/fd0h360
/dev/fd0h720
/dev/fd0H1440
B. 詳解Linux系統內存知識及調優方案
內存是計算機中重要的部件之一,它是與CPU進行溝通的橋梁。計算機中所有程序的運行都是在內存中進行的,因此內存的性能對計算機的影響非常大。內存作用是用於暫時存放CPU中的運算數據,以及與硬碟等外部存儲器交換的數據。只要計算機在運行中,CPU就會把需要運算的數據調到內存中進行運算,當運算完成後CPU再將結果傳送出來,內存的運行也決定了計算機的穩定運行。對於整個操作系統來說,內存可能是最麻煩的的設備。而其性能的好壞直接影響著整個操作系統。
我們知道CPU是不能與硬碟打交道的,只有數據被載入到內存中才可以被CPU調用。cpu在訪問內存的時候需要先像內存監控程序請求,由監控程序控制和分配內存的讀寫請求,這個監控程序叫做MMU(內存管理單元)。下面以32位系統來說明內存的訪問過程:
32位的系統上每一個進程在訪問內存的時候,每一個進程都當做自己有4個G的內存空間可用,這叫虛擬內存(地址),虛擬內存轉化成物理內存是通過MMU來完成的。為了能夠從線性地址轉換成物理地址,需要page table(頁表)的內存空間,page table要載入到MMU上。為了完成線性地址到物理地址的映射,如果按照1個位元組1個位元組映射的話,需要一張非常大的表,這種轉換關系會非常的復雜。因此把內存空間又劃分成了另外一種存儲單元格式,通常為4K。在不同的硬體平台上,它們的大小一般是不一樣的,像x86 32位的有4k的頁;而64位的有4k頁,2M頁,4M頁,8M頁等等,默認都是4k的。每一個進程一般而言都有自己的頁路徑和頁表映射機制,不管那一個頁表都是由內核載入的。每一個進程只能看到自己的線性地址空間,想要增加新的內存的時候,只能在自己的線性地址空間中申請,並且申請後一定是通過操作系統的內核映射到物理地址空間中去找那麼一段空間,並且告訴線性地址空間准備好了,可以訪問,並且在page table中增加一條映射關系,於是就可以訪問物理內存了,這種叫做內存分配。但是新的申請一定是通過操作的內核到物理內存中去找那麼一段空間,並且告訴線性地址空間好了,可以建設映射關系,最終page table建立映射關系。
這反映了上述描述過程的大體情況。可以看到每一個用戶程序都會有自己的頁表,並且映射到對應的主存儲器上去。
根據上述文字和圖表的描述可以發現2個問題:
1.每個進程如果需要訪問內存的時候都需要去查找page table的話,勢必會造成伺服器的性能底下
2.如果主存儲器的內存滿了以後,應用程序還需要調用內存的時候怎麼辦
對於第一個問題,我們就需要藉助TLB(Translation Lookaside Buffer)翻譯後備緩沖器。TLB是一個內存管理單元,它可以用於改進虛擬地址到物理地址轉換速度的緩存。這樣每次在查找page table的時候就可以先去TLB中查找相應的頁表數據,如果有就直接返回,沒有再去查找page table,並把查找到的結果緩存中TLB中。TLB雖然解決了緩存的功能,但是在那麼page table中查找映射關系仍然很慢,所以又有了page table的分級目錄。page table可以分為1級目錄,2級目錄和偏移量
但是一個進程在運行的時候要頻繁的打開文件,關閉文件。這就意味著要頻繁的申請內存和釋放內存。有些能夠在內存中緩存數據的那些進程,他們對內存的分配和回收更多,那麼每一次分配都會在頁表中建立一個對應項。所以,就算內存的速度很快,大量頻繁的同一時間分配和釋放內存,依然會降低伺服器的整體性能。當然內存空間不夠用的時候,我們稱為oom(out of memory,內存耗盡)。當內存耗盡的時候,,整個操作系統掛了。這種情況下我們可以考慮交換分區,交換分區畢竟是由硬碟虛擬出來的內存,所以其性能與真正的內存相比,差了很多,所以要盡力避免使用交換分區。有物理內存空間的時候盡量保證全部使用物理內存。cpu無論如何是不能給交換內存打交道的,它也只能給物理內存打交道,能定址的空間也只能是物理內存。所以當真正物理內存空間不夠用的時候,會通過LRU演算法把其中最近最少使用的內存放到交換內存中去,這樣物理內存中的那段空間就可以供新的程序使用了。但是這樣會引發另外的一個問題,即原來的進程通過page table尋找的時候,那一段空間的數據已經不屬於它了。所以此刻cpu發送通知或者異常告訴這個程序,這個地址空間已不屬於它,這個時候可能會出現2種情況:
1.物理內存有可用的空間可用:這個時候cpu會根據以前的轉換策略會把交換分區中的那段內存重新送到物理內存中去,但是轉換過來的空間地址不一定會是以前的那一段空間地址,因為以前的那一段空間地址可能已經被別人使用了。
2.物理內存沒有可用的空間可用:這個時候依然會使用LRU算發把當前物理地址空間上最近最少使用的空間地址轉換到交換內存中去,並把當前進程需要的這斷在交換空間中的內存送到物理內存空間中去,並且重新建立映射關系。
上述通知或者異常出現的情況,通常叫做缺頁異常。缺頁異常也分為大異常和小異常兩種。大異常就是訪問的數據內存中沒有,不的不去硬碟上載入,無論是從交換內存中還是直接從磁碟的某個文件系統上,反正需要從硬碟上去載入,這種異常載入需要很長時間。小異常就是進程之間通過共享內存,第二個進程訪問的時候,查看本地的內存映射表沒有,但是其它進程已經擁有了這個內存頁,所以可以直接映射,這種異常載入需要的時間一般很短。
在操作系統開機的時候,每一個io設備都會像cpu申請一些列的隨機埠,這種埠叫做io埠。在IBM PC體系結構中,I/O地址空間一共提供了65,536個8位的I/O埠。正是這些io埠的存在,cpu可以與io設備進行讀寫交互的過程。在執行讀寫操作時,CPU使用地址匯流排選擇所請求的I/O埠,使用數據匯流排在CPU寄存器和埠之間傳送數據。I/O埠還可以被映射到物理地址空間:因此,處理器和I/O設備之間的通信就可以直接使用對內存進行操作的匯編語言指令(例如,mov、and、or等等)。現代的硬體設備更傾向於映射I/O,因為這樣處理的速度較快,並可以和DMA結合起來使用。這樣io在和內存傳數據的時候就不需要通過cpu,cpu把匯流排的控制權交給DMA,每次io傳數據的時候就調用DMA一次,就把cpu給解放了出來。當數據傳輸完了以後,DMA通知給cpu中斷一次。DMA在運行的時候對整個匯流排有控制許可權,當cpu發現有其它進程需要使用匯流排的時候,二者就會產生爭用。這個時候,在匯流排控制權的使用上,CPU和DMA具有相等的許可權。只要CPU委託給了DMA,就不能隨意的收回這個委託,就要等待DMA的用完。
如果沒有其它進程可以運行,或者其它進程運行的時間非常短,這個時候CPU發現我們的IO仍然沒有完成,那就意味著,CPU只能等待IO了。CPU在時間分配裡面有個iowait的值,就是CPU在等待IO花費的時間。有些是在同步調用過程中,CPU必須要等待IO的完成;否者CPU可以釋放IO的傳輸在背後自動完成,CPU自己去處理其它的事情。等硬碟數據傳輸完成以後,硬碟只需要像CPU發起一個通知即可。CPU外圍有一種設備,這個設備叫做可編程中斷控制器。每一個硬體設備為了給CPU通信,在剛開機的時候,在BIOS實現檢測的時候,這個設備就要到可編程中斷控制器上去注冊一個所謂的中斷號。那麼這個號碼就歸這個硬體使用了。當前主機上可能有多個硬體,每一個硬體都有自己的號碼,CPU在收到中斷號以後,就能夠通過中斷相量表查找到那個硬體設備進行中斷。並且就由對應的IO埠過來處理了。
CPU正在運行其它進程,當一個中斷請求發過來的時候,CPU會立即終止當前正在處理的進程,而去處理中斷。當前CPU掛起當前正在處理的進程,轉而去執行中斷的過程,也叫做中斷切換。只不過,這種切換在量級別上比進程切換要低一些,而且任何中斷的優先順序通常比任何進程也要高,因為我們指的是硬體中斷。中斷還分為上半部和下半部,一般而言,上半部就是CPU在處理的時候,把它接進來,放到內存中,如果這個事情不是特別緊急(CPU或者內核會自己判斷),因此在這種情況下,CPU回到現場繼續執行剛才掛起的進程,當這個進程處理完了,再回過頭來執行中斷的下半部分。
在32位系統中,我們的內存(線性地址)地址空間中,一般而言,低地址空間有一個G是給內核使用的,上面3個G是給進程使用的。但是應該明白,其實在內核內存當中,再往下,不是直接這樣劃分的。32位系統和64位系統可能不一樣(物理地址),在32位系統中,最低端有那麼10多M的空間是給DMA使用的。DNA的匯流排寬度是很小的,可能只有幾位,所以定址能力很有限,訪問的內存空間也就很有限。如果DMA需要復制數據,而且自己能夠定址物理內存,還可以把數據直接壯哉進內存中去,那麼就必須保證DMA能夠定址那段內存才行。定址的前提就是把最低地址斷M,DA的定址范圍內的那一段給了DMA。所以站在這個角度來說,我們的內存管理是分區域的。
在32位系統上,16M的內存空間給了ZONE_DMA(DMA使用的物理地址空間);從16M到896M給了ZONE_NORMAL(正常物理地址空間),對於Linux操作系統來說,是內核可以直接訪問的地址空間;從896M到1G這斷空間叫做"Reserved"(預留的物理地址空間);從1G到4G的這段物理地址空間中,我們的內核是不能直接訪問的,要想訪問必須把其中的一段內容映射到Reserved來,在Reserved中保留出那一段內存的地址編碼,我們內核才能上去訪問,所以內核不直接訪問大於1G的物理地址空間。所以在32位系統上,它訪問內存當中的數據,中間是需要一個額外步驟的。
在64位系統上,ZONE_DAM給了低端的1G地址空間,這個時候DMA的定址能力被大大加強了;ZONE_DAM32可以使用4G的空間;而大於1G以上給劃分了ZONE_NORMAL,這段空間都可以被內核直接訪問。所以在64位上,內核訪問大於1G的內存地址,就不需要額外的步驟了,效率和性能上也大大增加,這也就是為什麼要使用64位系統的原因。
在現在的PC架構上,AMD,INTER都支持一種機制,叫做PEA(物理地址擴展)。所謂PAE。指的是在32位系統的地址匯流排上,又擴展了4位,使得32位系統上的地址空間可以達到64G。當然在32為系統上,不管你的物理內存有多大,單個進程所使用的空間是無法擴展的。因為在32位的系統上,線性地址空間只有4個G,而單個進程能夠識別的訪問也只有3個G。
linux的虛擬內存子系統包含了以下幾個功能模塊:
slab allocator,zoned buddy allocator,MMU,kswapd,bdflush
slab allocator叫做slab分配器
buddy allocator又叫做buddy system,叫做夥伴系統,也是一種內存分配器
buddy system是工作在MMU之上的,而slab allocator又是工作在buddy system之上的。
設置為小於等於1G,在資料庫伺服器應該勁量避免使用交換內存
3.在應用伺服器上,可以設置為RAM*0.5,當然這個是理論值
如果不的不使用交換內存,應該把交換內存放到最靠外的磁軌分區上,因為最外邊的磁碟的訪問速度最快。所以如果有多塊硬碟,可以把每塊硬碟的最外層的磁軌拿一小部分出來作為交換分區。交換分區可以定義優先順序,因此把這些硬碟的交換內存的優先順序設置為一樣,可以實現負載均衡的效果。定義交換分區優先順序的方法為編輯/etc/fstab:
/dev/sda1 swap swap pri=5 0 0
/dev/sdb1 swap swap pri=5 0 0
/dev/sdc1 swap swap pri=5 0 0
/dev/sdd1 swap swap pri=5 0 0
四.內存耗盡時候的相關調優參數
當Linux內存耗盡的時候,它會殺死那些佔用內存最多的進程,以下三種情況會殺死進程:
1.所有的進程都是活動進程,這個時候想交換出去都沒有空閑的進程
2.沒有可用的page頁在ZONE_NORMAL中
3.有其它新進程啟動,申請內存空間的時候,要找一個空閑內存給做映射,但是這個時候找不到了
一旦內存耗盡的時候,操作系統就會啟用oom-kill機制。
在/proc/PID/目錄下有一個文件叫做oom_score,就是用來指定oom的評分的,就是壞蛋指數。
如果要手動啟用oom-kill機制的話,只需要執行echo f>/proc/sysrq-trigger即可,它會自動殺掉我們指定的壞蛋指數評分最高的那個進程
可以通過echo n > /proc/PID/oom_adj來調整一個進程的壞蛋評分指數。最終的評分指數就是2的oom_adj的值的N次方。假如我們的一個進程的oom_adj的值是5,那麼它的壞蛋評分指數就是2的5次方。
如果想禁止oom-kill功能的使用可以使用vm.panic_on_oom=1即可。
五.與容量有關的內存調優參數:
overcommit_memory,可用參數有3個,規定是否能夠過量使用內存:
0:默認設置,內核執行啟發式的過量使用處理
1:內核執行無內存的過量使用處理。使用這個值會增大內存超載的可能性
2:內存的使用量等於swap的大小+RAM*overcommit_ratio的值。如果希望減小內存的過度使用,這個值是最安全的
overcommit_ratio:將overcommit_memory指定為2時候,提供的物理RAM比例,默認為50
六.與通信相關的調優參數
常見在同一個主機中進行進程間通信的方式:
1.通過消息message;2.通過signal信號量進行通信;3.通過共享內存進行通信,跨主機常見的通信方式是rpc
以消息的方式實現進程通信的調優方案:
msgmax:以位元組為單位規定消息隊列中任意消息的最大允許大小。這個值一定不能超過該隊列的大小(msgmnb),默認值為65536
msgmnb:以位元組為單位規定單一消息隊列的最大值(最大長度)。默認為65536位元組
msgmni:規定消息隊列識別符的最大數量(及隊列的最大數量)。64位架構機器的默認值為1985;32位架構機器的默認值為1736
以共享內存方式實現進程通信的調優方案:
shmall:以位元組為單位規定一次在該系統中可以使用的共享內存總量(單次申請的上限)
shmmax:以位元組為單位規定每一個共享內存片段的最大大小
shmmni:規定系統范圍內最大共享內存片段。在64和32位的系統上默認值都是4096
七.與容量相關的文件系統可調優參數:
file-max:列出內核分配的文件句柄的最大值
dirty_ratio:規定百分比值,當臟數據達到系統內存總數的這個百分比值後開始執行pdflush,默認為20
dirty_background_ratio:規定百分比值,當某一個進程自己所佔用的臟頁比例達到系統內存總數的這個百分比值後開始在後台執行pdflush,默認為10
dirty_expire_centisecs:pdlush每隔百分之一秒的時間開啟起來刷新臟頁,默認值為3000,所以每隔30秒起來開始刷新臟頁
dirty_writeback_centisecs:每隔百分之一秒開始刷新單個臟頁。默認值為500,所以一個臟頁的存在時間達到了5秒,就開始刷新臟
八.linux內存常用的觀察指標命令:
Memory activity
vmstat [interval] [count]
sar -r [interval] [count]
Rate of change in memory
sar -R [interval] [count]
frmpg/s:每秒釋放或者分配的內存頁,如果為正數,則為釋放的內存頁;如果為負數,則為分配的內存頁
bufpg/s:每秒buffer中獲得或者釋放的內存頁。如果為正數則為獲得的內存頁,為負數。則為釋放的內存頁
campg/s:每秒cache中獲得或者釋放的內存頁。如果為正數則為獲得的內存頁,為負數。則為釋放的內存頁
Swap activity
sar -W [interval] [count]
ALL IO
sar -B [interval] [count]
pgpgin/s:每秒從磁碟寫入到內核的塊數量
pgpgout/s:每秒從內核寫入到磁碟的塊數量
fault/s:每秒鍾出現的缺頁異常的個數
majflt/s:每秒鍾出現的大頁異常的個數
pgfree/s:每秒回收回來的頁面個數
C. Linux 系統文件管理、磁碟管理命令有哪些各寫出5個,並寫出其具體3個功能
文件管理:
vi/touch/cp/mkdir/rm
vi:對linux下的文本文件進行編輯
vi a
這個命令可以創建一個名字為a的文件,並可以對它進行編輯。
touch:可以改變文件的時間戳或者創建新的文件
touch a
如果當前目錄下沒有a這個文件,則創建a文件;如果已經存在,將把這個文件的創建時間戳改為執行touch命令的時間
mkdir:創建目錄的命令
mkdir mulu
該命令可以創建名稱為mulu的目錄
磁碟:
df//mkfs/fdisk/mount
df:顯示當前磁碟空間使用的情況
df -m
以單位為兆顯示磁碟空間使用情況
:顯示目錄的使用情況
-sh
顯示當前目錄使用的詳細情況
mount:載入磁碟或者是一些存儲設備
mount -t ext3 /dev/sda2 /root/sda
將sda的第二個分區(分區文件類型為ext3)掛載到/root/sda目錄下
D. linux必學的命令是什麼
不同版本的Linux命令數量不一樣,這里筆者把它們中比較重要的和使用頻率最多的命令,按照它們在系統中的作用分成幾個部分介紹給,通過這些基礎命令的學習可以進一步理解Linux系統:
安裝和登錄命令:login、shutdown、halt、reboot、mount、umount、chsh。
文件處理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln。
系統管理相關命令:df、top、free、quota、at、lp、adser、groupaddkill、crontab、tar、unzip、gunzip、last。
網路操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rloginrcp、finger、mail、nslookup。
學習linux注意事項
1、Linux嚴格區分大小寫。
2、Linux所有的存儲設備都必須掛載之後用戶才能使用,包括硬碟、U盤和光碟。
3、Windows下的程序不能直接在Linux中安裝和運行。
E. linux內存管理的特點
什麼是虛擬內存?
Linux支持虛擬內存(virtual memory),虛擬內存是指使用磁碟當作RAM的擴展,這樣可用的內存的大小就相應地增大了。內核會將暫時不用的內存塊的內容寫到硬碟上,這樣一來,這塊內存就可用於其它目的。當需要用到原始的內容時,它們被重新讀入內存。這些操作對用戶來說是完全透明的;Linux下運行的程序只是看到有大量的內存可供使用而並沒有注意到時不時它們的一部分是駐留在硬碟上的。當然,讀寫硬碟要比直接使用真實內存慢得多(要慢數千倍),所以程序就不會象一直在內存中運行的那樣快。用作虛擬內存的硬碟部分被稱為交換空間(swap space)。
Linux能夠使用文件系統中的一個常規文件或一個獨立的分區作為交換空間。交換分區要快一些,但是很容易改變交換文件的大小(也就無需重分區整個硬碟,並且可以從臨時分區中安裝任何東西)。當你知道你需要多大的交換空間時,你應該使用交換分區,但是如果你不能確定的話,你可以首先使用一個交換文件,然後使用一陣子系統,你就可以感覺到要有多大的交換空間,此時,當你能夠確信它的大小時就創建一個交換分區。
你應該知道,Linux允許同時使用幾個交換分區以及/或者交換文件。這意味著如果你只是偶爾地另外需要一個交換空間時,你可以在當時設置一個額外的交換文件,而不是一直分配這個交換空間。
操作系統術語注釋:計算機科學常常將交換[swapping](將整個進程寫到交換空間)與頁面調度[paging](在某個時刻,僅僅固定大小的幾千位元組寫到交換空間內)加以區別。頁面調度通常更有效,這也是Linux的做法,但是傳統的Linux術語卻指的是交換。
創建交換空間
一個交換文件是一個普通的文件;對內核來說一點也不特殊。對內核有關系的是它不能有孔,並且它是用mkswap來准備的。而且,它必須駐留在一個本地硬碟上,它不能由於實現的原因而駐留在一個通過NFS載入的文件系統中。
關於孔是重要的。交換文件保留了磁碟空間,以至於內核能夠快速地交換出頁面而無需做分配磁碟扇區給文件時所要做的一些事。內核僅僅是使用早已分配給交換文件的任何扇區而已。因為文件中的一個孔意味著沒有磁碟扇區分配(給該文件的孔的相應部分),對內核來說就不能使用這類有孔的文件。
創建無孔的交換文件的一個好方法是通過下列命令:
$ dd if=/dev/zero of=/extra-swap bs=1024 count=1024 \
上面/extra-swap是交換文件的名字,大小由count=後面的數值給出。大小最好是4的倍數,因為內核寫出的內存頁面(memory pages)大小是4千位元組。如果大小不是4的倍數,最後幾千位元組就用不上了。
一個交換分區也並沒有什麼特別的。你可以象創建其它分區一樣地創建它;唯一的區別在於它是作為一個原始的分區使用的,也即,它不包括任何的文件系統。將交換分區標記為類型82(Linux交換分區)是個好主意;這將使得分區的列表更清楚,盡管對內核來說並不是一定要這樣的。
在創建了一個交換文件或一個交換分區以後,你必須在它的開頭部分寫上一個簽名;這個簽名中包括了一些由內核使用的管理信息。這是用\cmd{mkswap}命令來做到的,用法如下:
$ mkswap /extra-swap 1024
Setting up swapspace, size = 1044480 bytes
請注意此時交換空間還沒有被使用:它已存在,但內核還沒有用它作為虛擬內存。你必須非常小心地使用mkswap,因為它不檢查這個文件或分區是否已被別人使用。你可以非常容易地使用mkswap來覆蓋重要的文件以及分區!幸運的是,僅僅在安裝系統時,你才需要使用mkswap。
Linux內存管理程序限制每個交換空間最大約為127MB(由於各種技術上的原因,實際的限制大小為(4096-10) * 8 * 4096 = 133890048$ 位元組,或127.6875兆位元組)。然而,你可以同時使用多至16個交換空間,總容量幾乎達2GB。
交換空間的使用
一個已初始化的交換空間是使用命令swapon投入正式使用的。該命令告訴內核這個交換空間可以被使用了。到交換空間的路徑是作為參數給出的,所以,開始在一個臨時交換文件上使用交換的命令如下:
$ swapon /extra-swap
通過把交換空間列入/etc/fstab文件中就能被自動地使用了。
/dev/hda8 none swap sw 0 0
/swapfile none swap sw 0 0
啟動描述文件會執行命令swapon –a,這個命令會啟動列於/etc/fstab中的所有交換空間。因此,swapon命令通常僅用於需要有外加的交換空間時。
你可以用free命令監視交換空間的使用情況。它將給出已使用了多少的交換空間。
total used free shared buffers
Swap: 32452 6684 25768
輸出的第一行(Mem:)顯示出物理內存的使用情況。總和(total)列中並沒有顯示出被內核使用的內存,它通常將近一兆位元組。已用列(used column)顯示出已用內存的總和(第二行沒有把緩沖算進來)。空閑列(free column)顯示了所有未被使用的空閑內存。共享列(shared column)顯示出了被幾個進程共享的內存的大小;共享的內存越多,情況就越好。緩存列(buffer column)顯示出了當前磁碟緩存的大小。已緩沖列(cached column)顯示出了已使用的緩存的大小。
最後一行(Swap:)顯示出了與交換空間相應的信息。如果這一行的數值都是零,表示你的交換空間沒有被擊活。
也可通過用top命令來獲得同樣的信息,或者使用proc文件系統中的文件/proc/meminfo 。通常要取得指定交換空間的使用情況是困難的。
可以使用命令swapoff來移去一個交換空間。通常沒有必要這樣做,但臨時交換空間除外。一般,在交換空間中的頁面首先被換入內存;如果此時沒有足夠的物理內存來容納它們又將被交換出來(到其他的交換空間中)。如果沒有足夠的虛擬內存來容納所有這些頁面,Linux就會波動而不正常;但經過一段較長的時間Linux會恢復,但此時系統已不可用了。在移去一個交換空間之前,你應該檢查(例如,用free)是否有足夠的空閑內存。
任何由swapon –a而自動被使用的所有交換空間都能夠用swapoff –a命令移去;該命令參考/etc/fstab文件來確定移去什麼。任何手工設置使用的交換空間將始終可以被使用。
有時,盡管有許多的空閑內存,仍然會有許多的交換空間正被使用。這是有可能發生的,例如如果在某一時刻有進行交換的必要,但後來一個佔用很多物理內存的大進程結束並釋放內存時。被交換出的數據並不會自動地交換進內存,除非有這個需要時。此時物理內存會在一段時間內保持空閑狀態。對此並沒有什麼可擔心的,但是知道了是怎麼一回事我們也就放心了。
許多操作系統使用了虛擬內存的方法。因為它們僅在運行時才需要交換空間,以即決不會在同一時間使用交換空間,因此,除了當前正在運行的操作系統的交換空間,其它的就是一種浪費。所以讓它們共享一個交換空間將會更有效率。這是可能的,但需要有一定的了解。在HOWTO技巧文檔中含有如何實現這種做法的一些建議。
有些人會對你說需要用物理內存的兩倍容量來分配交換空間,但這是不對的。下面是合適的做法:
。估計你的總內存需求。這是某一時刻你所需要的最大的內存容量,也就是在同一時刻你想運行的所有程序所需內存的總和。通過同時運行所有的程序你可以做到這一點。
例如,如果你要運行X,你將給它分配大約8MB內存,gcc需要幾兆位元組(有些文件要求異呼尋常的大量的內存量,多至幾十兆位元組,但通常約4兆位元組應該夠了),等等。內核本身要用大約1兆位元組、普通的shell以及其它一些工具可能需要幾百千位元組(就說總和要1兆位元組吧)。並不需要進行精確的計算,粗率的估計也就足夠了,但你必須考慮到最壞的情況。
注意,如果會有幾個人同時使用這個系統,他們都將消耗內存。然而,如果兩個人同時運行一個程序,內存消耗的總量並不是翻倍,因為代碼頁以及共享的庫只存在一份。
Free以及ps命令對估計所需的內存容量是很有幫助的。
對第一步中的估計放寬一些。這是因為對程序在內存中佔用多少的估計通常是不準的,因為你很可能忘掉幾個你要運行的程序,以及,確信你還要有一些多餘的空間用於以防萬一。這需幾兆位元組就夠了。(多分配總比少分配交換空間要好,但並不需要過分這樣以至於使用整個硬碟,因為不用的交換空間是浪費的空間;參見後面的有關增加交換空間。)同樣,因為處理數值更好做,你可以將容量值加大到整數兆位元組。
基於上面的計算,你就知道了你將需要總和為多少的內存。所以,為了分配交換空間,你僅需從所需總內存量中減去實際物理內存的容量,你就知道了你需要多少的交換空間。(在某些UNIX版本中,你還需要為物理內存的映像分配空間,所以第二步中算出的總量正是你所需要的交換空間的容量,而無需再做上述中的減法運算了。)
如果你計算出的交換空間容量遠遠大於你的物理內存(大於兩倍以上),你通常需要再買些內存來,否則的話,系統的性能將非常低。
有幾個交換空間是個好主意,即使計算指出你一個都不需要。Linux系統常常動不動就使用交換空間,以保持盡可能多的空閑物理內存。即使並沒有什麼事情需要內存,Linux也會交換出暫時不用的內存頁面。這可以避免等待交換所需的時間:當磁碟閑著,就可以提前做好交換。
可以將交換空間分散在幾個硬碟之上。針對相關磁碟的速度以及對磁碟的訪問模式,這樣做可以提高性能。你可能想實驗幾個方案,但是你要認識到這些實驗常常是非常困難的。不要相信其中一個方案比另一個好的說法,因為並不總是這樣的。
高速緩沖
與訪問(真正的)的內存相比,磁碟[3]的讀寫是很慢的。另外,在相應較短的時間內多次讀磁碟同樣的部分也是常有的事。例如,某人也許首先閱讀了一段e-mail消息,然後為了答復又將這段消息讀入編輯器中,然後又在將這個消息拷貝到文件夾中時,使得郵件程序又一次讀入它。或者考慮一下在一個有著許多用戶的系統中ls命令會被使用多少次。通過將信息從磁碟上僅讀入一次並將其存於內存中,除了第一次讀以外,可以加快所有其它讀的速度。這叫作磁碟緩沖(disk buffering),被用作此目的的內存稱為高速緩沖(buffer cache)。
不幸的是,由於內存是一種有限而又不充足的資源,高速緩沖不可能做的很大(它不可能包容要用到的所有數據)。當緩沖充滿了數據時,其中最長時間不用的數據將被舍棄以騰出內存空間用於新的數據。
對寫磁碟操作來說磁碟緩沖技術同樣有效。一方面,被寫入磁碟的數據常常會很快地又被讀出(例如,原代碼文件被保存到一個文件中,又被編譯器讀入),所以將要被寫的數據放入緩沖中是個好主意。另一方面,通過將數據放入緩沖中,而不是將其立刻寫入磁碟,程序可以加快運行的速度。以後,寫的操作可以在後台完成,而不會拖延程序的執行。
大多數操作系統都有高速緩沖(盡管可能稱呼不同),但是並不是都遵守上面的原理。有些是直接寫(write-through):數據將被立刻寫入磁碟(當然,數據也被放入緩存中)。如果寫操作是在以後做的,那麼該緩存被稱為後台寫(write-back)。後台寫比直接寫更有效,但也容易出錯:如果機器崩潰,或者突然掉電,或者是軟盤在緩沖中等待寫的數據被寫入軟盤之前被從驅動器中取走,緩沖中改變過的數據就被丟失了。如果仍未被寫入的數據含有重要的薄記信息,這甚至可能意味著文件系統(如果有的話)已不完整。
由於上述原因,在使用適當的關閉過程之前,絕對不要關掉電源(見第六章),不要在卸載(如果已被載入)之前將軟盤從驅動器中取出來,也不要在任何正在使用軟盤的程序指示出完成了軟盤操作並且軟盤燈熄滅之前將軟盤取出來。sync命令傾空(flushes)緩沖,也即,強迫所有未被寫的數據寫入磁碟,可用以確定所有的寫操作都已完成。在傳統的UNIX系統中,有一個叫做update的程序運行於後台,每隔30秒做一次sync操作,因此通常無需手工使用sync命令了。Linux另外有一個後台程序,bdflush,這個程序執行更頻繁的但不是全面的同步操作,以避免有時sync的大量磁碟I/O操作所帶來的磁碟的突然凍結。
在Linux中,bdflush是由update啟動的。通常沒有理由來擔心此事,但如果由於某些原因bdflush進程死掉了,內核會對此作出警告,此時你就要手工地啟動它了(/sbin/update)。
緩存(cache)實際並不是緩沖文件的,而是緩沖塊的,塊是磁碟I/O操作的最小單元(在Linux中,它們通常是1KB)。這樣,目錄、超級塊、其它文件系統的薄記數據以及非文件系統的磁碟數據都可以被緩沖了。
緩沖的效力主要是由它的大小決定的。緩沖大小太小的話等於沒用:它只能容納一點數據,因此在被重用時,所有緩沖的數據都將被傾空。實際的大小依賴於數據讀寫的頻次、相同數據被訪問的頻率。只有用實驗的方法才能知道。
如果緩存有固定的大小,那麼緩存太大了也不好,因為這會使得空閑的內存太小而導致進行交換操作(這同樣是慢的)。為了最有效地使用實際內存,Linux自動地使用所有空閑的內存作為高速緩沖,當程序需要更多的內存時,它也會自動地減小緩沖的大小。
在Linux中,你不需要為使用緩沖做任何事情,它是完全自動處理的。除了上面所提到的有關按照適當的步驟來關機和取出軟盤,你不用擔心它。
F. Linux存儲管理方式
這種方式中,將用戶程序的地址空間,注意,是 用戶程序的地址空間 分為若干個固定大小的區域,成為「頁」或「頁面」。我們可以知道,這也頁其實是不存在的,只是一種劃分內存空間的方法。也就是說,這種方式將用戶的程序 「肢解」 了,分成很多個小的部分,每個部分稱為一個「頁」。
將邏輯地址的前n位作為頁號,後面32-n位作為頁內偏移量。
由於進程的最後一頁經常裝不滿一個塊,從而形成了不可利用的碎片,稱之為 「頁內碎片」 。
作用:實現頁號到物理號的地址映射。
頁表是記錄邏輯空間(虛擬內存)中每一頁在內存中對應的物理塊號。但並非每一頁邏輯空間都會實際對應著一個物理塊,只有實際駐留在物理內存空間中的頁才會對應著物理塊。
系統會為每一個進程建立一張頁表,頁表是需要一直駐留在物理內存中的(多級頁表除外),另外頁表的起址和長度存放在 PCB(Process Control Block)進程式控制制結構體中。
可以在頁表的表項中設置相關的許可權控制欄位,例如設置存取控制欄位,用於保護該存儲塊的讀寫;若存取控制欄位為2位,則可以設置讀/寫、只讀和只執行等存取方式。
物理塊是實實在在存在於內存中的:
由於執行頻率高,要求效率比較高,需要使用硬體實現。
在系統中設置一個 頁表寄存器(PTR) ,其中存放頁表在內存的起始地址和頁表的長度。平時進程未執行的時候,頁表的起始地址和頁表長度放在本進程的PCB中。當調度程序調度到某個進程的時候,才將這兩個數據裝入 頁表寄存器 。
變換過程:
快表的變換機構
為了提高地址變換速度,可在地址變換機構中增設一個具有並行查詢能力的特殊高速緩沖寄存器,又稱為"聯想寄存器"或者「快表」。俗稱TLB。
快表與頁表的功能類似,其實就是將一部分頁表存到 CPU 內部的高速緩沖存儲器 Cache。CPU 定址時先到快表查詢相應的頁表項形成物理地址,如果查詢不到,則到內存中查詢,並將對應頁表項調入到快表中。但,如果快表的存儲空間已滿,則需要通過演算法找到一個暫時不再需要的頁表項,將它換出內存。
由於成本的關系,快表不可能做得很大,通常只存放 16~512 個頁表項,這對中、小型作業來說,已有可能把全部頁表項放在快表中;但對於大型作業而言,則只能將其一部分頁表項放入其中。由於對程序和數據的訪問往往帶有局限性,因此,據統計,從快表中能找到所需頁表項的概率可達 90% 以上。這樣,由於增加了地址變換機構而造成的速度損失可減少到 10% 以下,達到了可接受的程度。
我們可以採用這樣兩個方法來解決這一問題:
① 對於頁表所需的內存空間,可採用離散分配方式,以解決難以找到一塊連續的大內存空間的問題;
② 只將當前需要的部分頁表項調入內存,其餘的頁表項仍駐留在磁碟上,需要時再調入。
二級頁表的頁表項:
過程:
在採用兩級頁表結構的情況下,對於正在運行的進程,必須將其外層頁表調入內存,而對於內頁表則只需調入一頁或幾頁。為了表徵某頁的頁表是否已經調入內存,還應在外層頁表項中增設一個狀態位 S,其值若為 0,表示該頁表分頁不在內存中,否則說明其分頁已調入內存。進程運行時,地址變換機構根據邏輯地址中的 P1去查找外層頁表;若所找到的頁表項中的狀態位為 0,則產生一個中斷信號,請求 OS 將該頁表分頁調入內存。
多級頁表和二級頁表類似。多級頁表和二級頁表是為了節省物理內存空間。使得頁表可以在內存中離散存儲。(單級頁表為了隨機訪問必須連續存儲,如果虛擬內存空間很大,就需要很多頁表項,就需要很大的連續內存空間,但是多級頁表不需要。)
為什麼引入分段存儲管理?
引入效果:
它將用戶程序的地址空間分為若干個大小不同的的段,每個段可以定義一組完整的信息。
段號表示段名,每個段都從0開始編址,並且採用一段連續的地址空間。
在該地址結構中,允許一個作業最長有64K個段,每個段的最大長度為64KB。
在分段式存儲管理系統中,為每一個分段分配一個連續的分區。進程的各個段,可以離散地裝入內存中不同的分區中。
作用:實現從邏輯地址到物理內存區的映射。
為了保證程序能夠正常運行,就必須能夠從物理內存中找出每個邏輯段所對應的位置。為此在系統中會為每一個進程建立一張 段表 。每個段在表中有一個表項,其中記錄了該段在內存中的起始地址和段的長度。一般將段表保存在內存中。
在配置了段表之後,執行的過程可以通過查找段表,找到每一個段所對應的內存區。
為了實現進程從邏輯地址到物理地址的變換功能,在系統設置了段表寄存器,用於存放段表的起始地址和段表長度TL。
在進行地址變換時,系統將邏輯地址中的段號與段表長度TL 進行比較。若 S > TL,表示段號太大,是訪問越界,於是產生越界中斷信號。若未越界,則根據段表的始址和該段的段號,計算出該段對應段表項的位置,從中讀出該段在內存的起始地址。然後,再檢查段內地址 d 是否超過該段的段長 SL。若超過,即 d>SL,同樣發出越界中斷信號。若未越界,則將該段的基址 d 與段內地址相加,即可得到要訪問的內存。
分頁和分段系統相似之處:兩者都採用離散分配方式,且都是通過地址映射機構實現地址變換。
但在概念上兩者完全不同,主要表現在下述三個方面:
分頁系統以頁面作為內存分配的基本單位,能有效地提高內存利用率,而分段系統以段作為內存分配的基本單位,它能夠更好地滿足用戶多方面的需要。
段頁式地址結構由段號、段內頁號及頁內地址三部分所組成
段頁式系統的基本原理是分段和分頁原理的結合,即先將用戶程序分成若干個段,再把每個段分成若干個頁,並為每一個段賦予一個段名。如下圖展示了一個作業地址空間的結構。該作業有三個段:主程序段、子程序段和數據段;頁面大小為 4 KB:
在段頁式系統中,為了實現從邏輯地址到物理地址的變換,系統中需要同時配置段表和頁表。段表的內容與分段系統略有不同,它不再是內存始址和段長,而是頁表始址和頁表長度。下圖展示出了利用段表和頁表進行從用戶地址空間到物理(內存)空間的映射。
在段頁式系統中,為了便於實現地址變換,須配置一個段表寄存器,其中存放段表始址和段長 TL。進行地址變換時,首先利用段號 S,將它與段長 TL 進行比較。若 S < TL,表示未越界,於是利用段表始址和段號來求出該段所對應的段表項在段表中的位置,從中得到該段的頁表始址,並利用邏輯地址中的段內頁號 P 來獲得對應頁的頁表項位置,從中讀出該貝所在的物理塊號 b,再利用塊號 b 和頁內地址來構成物理地址。
在段頁式系統中,為了獲得一條指令或數據,須三次訪問內存。第一次訪問是訪問內存中的段表,從中取得頁表始址;第二次訪問是訪問內存中的頁表,從中取出該頁所在的物理塊號,並將該塊號與頁內地址一起形成指令或數據的物理地址;第三次訪問才是真正從第二次訪問所得的地址中取出指令或數據。
顯然,這使訪問內存的次數增加了近兩倍。為了提高執行速度,在地址變換機構中增設一個高速緩沖寄存器。每次訪問它時,都須同時利用段號和頁號去檢索高速緩存,若找到匹配的表項,便可從中得到相應頁的物理塊號,用來與頁內地址一起形成物理地址:若未找到匹配表項,則仍需第三次訪問內存。
參考鏈接:
G. Linux系統設置U盤自動掛載
筆者在工作中遇到自動掛載U盤,於是在樹莓派和紅帽系統上研究了一下U盤實現自動掛載。總的來說,Linux gnome/kde窗口環境下有移動存儲的管理程序,可以實現自動掛載移動存儲設備,但是在命令行下 通常需要用mount命令手動掛載USB存儲設備。第二種方法有風險,第三種是設備管理服務udev添加規則實現自動mount,第四種方法則進一步封裝mount添加日誌功能。
Raspberry Pi中USB設備的自動掛載由基於LXDE的GUI / DE處理,具體來說,由文件管理器PCManFM控制。若要禁用此行為,請打開「文件管理器」,然後從「編輯」菜單中選擇「首選項」。選擇「卷管理」選項卡,取消選中第二個選項「掛載可移動介質...」 ,可以禁用第三個選項「顯示可用選項...」設置,以防止彈出窗口提示可用程序。
系統開機時會主動讀取/etc/fstab這個文件中的內容,根據文件裡面的配置掛載磁碟。使用檢查UUID: sudo blkid,顯示關於可用塊設備的信息, 查找您的設備(如 / dev / sda1 )並復制其UUID。此方法只限於開機時已經插入U盤了,開機後再插入就不發自動掛載,需要執行sudo mount -a命令。
在文件/ etc / fstab底部添加:UUID={YOUR-UID} {/path/to/mount/point} {file-system-type} defaults,errors=remount-ro 0 1
倒數第二是mp備份設置,當其值設置為1時,將允許mp備份程序備份;設置為0時,忽略備份操作。倒數第一是fsck磁碟檢查設置,其值是一個順序,當其值為0時,永遠不檢查;而 / 根目錄分區永遠都為1,其它分區從2開始,數字越小越先檢查。
修改後保存,關閉,重新啟動設備以檢查或鍵入: sudo mount -a 。mount -a 是自動掛載 /etc/fstab 裡面的東西,會忽略所有已經完成的操作。但是筆者認為在這裡面添加太過於危險,不要輕易操作這個文件,有可能造成系統無法開機。外部設備在插入時掛載,在未插入時忽略,不然無法進入系統,這需要添加 nofail 選項,但是操作這個文件不太方便,有其他剛好的方法。
文件種有兩種ACTION,add和remove。在U盤插入或者拔出時,自動激活mount和unmount,完成設備自動掛載。
KERNEL!="sd*", GOTO="media_by_label_auto_mount_end"
SUBSYSTEM!="block",GOTO="media_by_label_auto_mount_end"
IMPORT{program}="/sbin/blkid -o udev -p %N"
ENV{ID_FS_TYPE}=="", GOTO="media_by_label_auto_mount_end"
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="Untitled-%k"
ACTION=="add", ENV{mount_options}="relatime,sync"
ACTION=="add", ENV{ID_FS_TYPE}=="vfat", ENV{mount_options}="iocharset=utf8,umask=000"
ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", ENV{mount_options}="iocharset=utf8,umask=000"
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
LABEL="media_by_label_auto_mount_end"
第三種方法中,mount或者unmount命令在實際運用中是無法記錄日誌的。在生產系統中就需要添加這個插入U盤和拔出U盤的動作,作為審核調查依據。將上面的mount -o或者unmount -l替換成usbhotplug.sh mount 和usbhotplug.sh unmount。
#!/usr/bin/bash
time=`date "+%Y%m%d"`
LOG_FILE="/home/pi/mount-usb-$time.log"
date=`date`
echo $date >> $LOG_FILE
CMD=$1
case $CMD in
'mount')
/bin/mkdir -p $4
echo "/bin/mkdir -p $4" >> $LOG_FILE
sleep 2
/bin/mount -o $2 $3 $4
echo "/bin/mount -o $2 $3 $4" >> $LOG_FILE
sync
echo "----------" >> $LOG_FILE
;;
'umount')
sync
/bin/umount -f $2
echo "/bin/umount $2" >> $LOG_FILE
sleep 2
/bin/rmdir $2
echo "/bin/rmdir $2" >> $LOG_FILE
echo "----------" >> $LOG_FILE
;;
esac
H. Linux 系統文件管理、磁碟管理命令有哪些各寫出5個,並寫出其具體3個功能
文件管理:
vi/touch/cp/mkdir/rm
vi:對linux下的文本文件進行編輯
vi a
這個命令可以創建一個名字為a的文件,並可以對它進行編輯。
touch:可以改變文件的時間戳或者創建新的文件
touch a
如果當前目錄下沒有a這個文件,則創建a文件;如果已經存在,將把這個文件的創建時間戳改為執行touch命令的時間
mkdir:創建目錄的命令
mkdir mulu
該命令可以創建名稱為mulu的目錄
磁碟:
df//mkfs/fdisk/mount
df:顯示當前磁碟空間使用的情況
df -m
以單位為兆顯示磁碟空間使用情況
:顯示目錄的使用情況
-sh
顯示當前目錄使用的詳細情況
mount:載入磁碟或者是一些存儲設備
mount -t ext3 /dev/sda2 /root/sda
將sda的第二個分區(分區文件類型為ext3)掛載到/root/sda目錄下
關於更多Linux的學習,請查閱書籍《linux就該這么學》。
I. Linux的磁碟管理
Linux的磁碟管理是Linux管理員非常重要的必須技能,現在的Ubuntu,紅帽。都已經可以使用LVM進行分區管理,也就是自動分配增長分區功能。看起來好像,不需要使用磁碟管理,磁碟可以自動管理。但是,我們的磁碟壞了,需要更新或者系統需要擴容,增加新的硬碟,這時候就必須要使用fdisk命令進行管理。本文就是針對fdisk進行管理的說明。
在Linux中要對磁碟進行分區,需要四步來進行(非常重要,不可缺少任何步驟):
1.對磁碟進行分區
2.內核重新讀取新的分區表:執行命令
partprobe /dev/sd (sd 新建的磁碟分區,*是新建分時候對應的磁碟,如:sdc1,sdb2等)
本文使用sdb1來演示
3.創建文件系統,Linux支持很多文件系統,主要有ext4和xfs
mkfs.ext4 /dev/sdb1
4.掛載,將文件系統連接到目錄結構中。
下面我執行上面的每一步驟:我假設新增磁碟
ls /dev/sd* ##查看新增磁碟
在下方輸入n;
最後輸入w進行保存(必須,否則會丟失,分區不成功。)
這樣,我們的第一步完成。
現在,進行第二步
創建文件系統,首先格式化硬碟分區。
mkfs.ext4 /dev/sdb1 ##在這里注意,一定不能格式化sdb,要格式化的是sdb1.要是格式化sdb,那麼sdb1就沒有了,所以一定要注意。
1.手動掛載:重啟後會失效,
mount 硬體所在目錄 掛載點 (目錄)。比如:
mkdir /mnt/user ###在/mnt目錄下創建user文件
mount /dev/sdb1 /mnt/user ###將sdb1分區掛載到mnt文件下的user文件下。user文件下的內容全部存儲到sdb1分區中。
2.永久掛載:就是將設備加到 /etc/fstab 文件中
vim /etc/fatab ###設置fstab配置文件