1. 程式人生 > >Linux下磁碟操作筆記

Linux下磁碟操作筆記

檢視分割槽情況及資料盤名稱
shell > df -lhT
檢視磁碟
shell > fdisk -l
格式化磁碟
shell > mkfs.ext4 /dev/vdb
[檢視硬碟UUID]
方法一:shell > ls -l /dev/disk/by-uuid
方法二:shell > blkid /dev/sda5
修改硬碟UUID
uuidgen 會返回一個合法的 uuid,結合 tune2fs 可以新生成一個 uuid 並寫入 ext2,3,4 分割槽中:
比如新建或改變 sda5 的 uuid (需要 root 許可權)
shell > uuidgen | xargs tune2fs /dev/sda5 -U
你也可以把 fstab 裡找到的原 uuid 寫回分割槽:
shell > tune2fs -U c1b9d5a2-f162-11cf-9ece-0020afc76f16 /dev/sda5

解除安裝
shell > umount /dirname

掛載
shell > mount /dev/sda3 /dirname
開機自動掛載
shell >vi /etc/fstab
|資料盤:|新掛載目錄:|檔案型別:|-:|-:|-:|
|/dev/sdb1| /data | ext3 | auto或defaults | 0 | 0|

檢視交換區檔案位置
shell > swapon -s 或 shell > cat /proc/swaps
Filename Type Size Used Priority
/dev/sda4 partition 32767992 172 -1

新增/重寫交換區檔案
shell > dd if=/dev/zero of=/var/tmp/swap bs=4K count=4096

格式格式化交換區檔案
shell > mkswap /var/tmp/swap

掛載交換區檔案
shell > swapon /var/tmp/swap

開機自動掛載交換區檔案
echo “/var/tmp/swap swap  swap defaults 0 0”>>/etc/fstab

解除安裝交換區檔案
shell > swapoff /var/tmp/swap

檢視交換區大小
shell >cat /proc/meminfo 或 shell > free

查詢大檔案
shell > find . -type f -size +800M -print0 | xargs -0 du -h | sort -nr

查詢大目錄
shell > du -hm –max-depth=2 | sort -nr | head -12

目錄擴容

專案初期使用者檔案較少,全部儲存在/home目錄下,/home目錄沒有單獨劃開分割槽,隨著專案網站做大,使用者檔案越來越多,/home目錄不夠空間,想掛載一個新硬碟來負責儲存.但發現新掛載/home到新硬碟時,/home原來資料變空了,這個原因是由於Linux的VFS(虛擬檔案系統)機制導致的,正常登入以後,所看到的各個目錄,檔案都是核心在載入時候構造在記憶體中的VFS目錄樹,而不是直接看到硬碟上的實際目錄樹。當你掛載某個裝置到一個VFS掛載點上時(比如/home),系統就把VFS中的這個掛載點/home指向你最後所掛載的那個裝置上。那麼你現在訪問該掛載點時,就會看到你最後掛載在此處的裝置。而之前所掛載的裝置依然在那裡,只不過掛載點/home已經不再指向之前的裝置。所以之前的資料是被隱藏了,但並沒有刪除,若umount掛載後,資料又重新回來了。基於這種情況,只能通過跳板的方式把原來的/home資料複製到新的/home分割槽下了 ,如何新增新硬碟,請查詢相關資料。

建立一個臨時的目錄作跳板

shell > mkdir /new

首先掛載跳板目錄

shell > mount /dev/sdb1 /new  

將/home目錄中的資料先轉移到/new目錄下

shell > cp -a /home/.  /new/  

騰出磁碟空間

shell > rm -rf /home/*       

掛載/home 到新硬碟,此時你會神奇的發現之前的/home目錄檔案已經全部轉移過來了,也許你會有點疑問,我並沒有複製或移動/new檔案到新掛載的/home目錄啊,其實此時的/home目錄相當於/new目錄的硬連結,可以測試下mkdir /new/test 你會發現/home目錄也存在test

shell > mount /dev/sdb1 /home 

解除臨時目錄的掛載

shell > umount /new 

刪除跳板目錄

shell > rm -rf /new 

最後別忘掉重要的一步,設定開機掛載目錄

shell > echo  "/dev/sdb1  /home    ext3    defaults    0 0" >> /etc/fstab 

Linux下fdisk工具不支援GPT,得使用另一個GNU釋出的強大分割槽工具parted。

parted概述
由於常見的fdisk不支援GPT(在硬碟容量大於2Tb的時候無法使用fdisk進行分割槽的管理),GNU Parted 具有豐富的功能,它除了能夠進行分割槽的新增、刪除等常見操作外,還可以進行移動分割槽、建立檔案系統、調整檔案系統大小、複製檔案系統等操作。它可以處理最常見的分割槽格式,包括:ext2,ext3,fat16,fat32,NTFS,ReiserFS,JFS,XFS,UFS,HFS,以及Linux交換分割槽。
parted 命令格式
parted 有兩種執行模式:命令列模式和互動模式。與 fdisk 的互動模式互動模式不同,在 parted 的互動模式下執行命令,一旦按回車鍵確認,命令就馬上執行,對磁碟的更改就立刻生效。
parted 命令的常用格式是:
1、# parted [選項] <硬碟裝置名>
2、# parted [選項] <硬碟裝置名> <子命令> [<子命令引數>]
格式(1)用於進入parted 的互動模式,在該模式下輸入parted的子命令對指定的硬碟進行分割槽等操作。quit 命令用於退出互動模式。
格式(2)直接在命令列方式下對指定的硬碟進行分割槽等操作。
其中常用的選項為:
-h, ––help — 顯示求助資訊
-i, ––interactive — 在必要時提示使用者
-l, ––list — 顯示所有磁碟裝置的分割槽表
-s, ––script — 從不提示使用者
-v, ––version — 顯示版本
無論哪種模式,在parted中都可以使用若干子命令,見下表。

命令說明
help [COMMAND] 列印命令的幫助資訊,或指定命令的幫助資訊
print [free|NUMBER|all] 顯示分割槽表, 指定編號的分割槽, 或所有裝置的分割槽表
mkpart PART-TYPE [FSTYPE] START END 建立新分割槽。PART-TYPE 是以下型別之一:primary(主分 區)、extended(擴充套件分割槽)、logical(邏輯分割槽)。START 和 END 是新分割槽開始和結束的具體位置。
rm NUMBER 刪除指定編號 NUMBER 的分割槽。
set NUMBER FLAG STATE 對指定編號 NUMBER 的分割槽設定分割槽標記 FLAG。對於 PC 常用的 msdos 分割槽表來說,分割槽標記 FLAG 可有如下值:”boot”(引導), “hidden”(隱藏), “raid”(軟RAID磁碟陣), “lvm”(邏輯卷), “lba” (LBA,Logic Block Addressing模式)。 狀態STATE 的取值是:on 或 off
unit UNIT 設定預設輸出時表示磁碟大小的單位為 UNIT,UNIT 的常用取值可以為:‘MB’、‘GB’、‘%’(佔整個磁碟裝置的百分之多少)、‘compact’(人類易讀方式,類似於 df 命令中 -h 引數的用)、‘s’(扇區)、‘cyl’ (柱面)、‘chs’ (柱面cylinders:磁頭 heads:扇區 sectors 的地址)
mkfs NUMBER FS-TYPE 對指定編號 NUMBER 的分割槽建立指定型別 FS-TYPE 的檔案系 統。
mkpartfs PART-TYPE FSTYPE START END 建立新分割槽同時建立檔案系統。FS-TYPE 是以下型別一:ext2、fat16、fat32、linuxswap、NTFS、reiserfs、ufs 等
cp [FROM-DEVICE] FROM-NUMBER TONUMBER 將分割槽 FROM-NUMBER 上的檔案系統完整地複製到分割槽TO-NUMBER 中,作為可選項還可以指定一個來源硬碟的裝置名稱FROM-DEVICE,若省略則在當前裝置上進行復制。
move NUMBER START END 將指定編號 NUMBER 的分割槽移動到從 START 開始 END 結束的位置上。注意:(1)只能將分割槽移動到空閒空間中。(2)雖然分割槽被移動了,但它的分割槽編號是不會改變的
resize NUMBER START END 對指定編號 NUMBER 的分割槽調整大小。分割槽的開始位置和結束位置由 START 和 END 決定
check NUMBER
檢查指定編號 NUMBER 分割槽中的檔案系統是否有什麼錯誤
rescue START END 恢復靠近位置 START 和 END 之間的分割槽
mklabel,mktable LABELTYPE 建立一個新的 LABEL-TYPE 型別的空磁碟分割槽表,對於PC而言 msdos 是常用的 LABELTYPE。 若是用 GUID 分割槽表,LABEL-TYPE 應該為 gpt

parted工具對/dev/sda做GPT分割槽的過程
shell > parted /dev/sda

GPT概述

全域性唯一標識分割槽表(GUID Partition Table,縮寫:GPT)是一個實體硬碟的分割槽結構。它是可擴充套件韌體介面標準的一部分,用來替代BIOS中的主引導記錄分割槽表。 傳統的主啟動記錄 (MBR) 磁碟分割槽支援最大卷為 2.2 TB (terabytes) ,每個磁碟最多有 4 個主分割槽(或 3 個主分割槽,1 個擴充套件分割槽和無限制的邏輯驅動器)。 與MBR 分割槽方法相比,GPT 具有更多的優點,因為它允許每個磁碟有多達 128 個分割槽,支援高達 18 千兆兆位元組 (exabytes,1EB=10^6TB) 的卷大小,允許將主磁碟分割槽表和備份磁碟分割槽表用於冗餘,還支援唯一的磁碟和分割槽 ID (GUID)。
與 MBR 分割槽的磁碟不同,GPT的分割槽資訊是在分割槽中,而不象MBR一樣在主引導扇區。為保護GPT不受MBR類磁碟管理軟體的危害,GPT在主引導扇區建立了一 個保護分割槽 (Protective MBR)的MBR分割槽表,這種分割槽的型別標識為0xEE,這個保護分割槽的大小在Windows下為128MB,Mac OS X下為200MB,在Window磁碟管理器里名為GPT保護分割槽,可讓MBR類磁碟管理軟體把GPT看成一個未知格式的分割槽,而不是錯誤地當成一個未分 區的磁碟。另外,GPT 分割槽磁碟有多餘的主要及備份分割槽表來提高分割槽資料結構的完整性。

在MBR硬碟中,分割槽資訊直接儲存於主引導記錄(MBR)中(主引導記錄中還儲存著系統的載入程式)。但在GPT硬碟中,分割槽表的位置資訊儲存在GPT頭中。但出於相容性考慮,硬碟的第一個扇區仍然用作MBR,之後才是GPT頭。跟現代的MBR一樣,GPT也使用邏輯區塊地址(LBA)取代了早期的CHS定址方式。傳統MBR資訊儲存於LBA 0,GPT頭儲存於LBA 1,接下來才是分割槽表本身。64位Windows作業系統使用16,384位元組(或32扇區)作為GPT分割槽表,接下來的LBA 34是硬碟上第一個分割槽的開始。為了減少分割槽表損壞的風險,GPT在硬碟最後儲存了一份分割槽表的副本。與主啟動記錄 (MBR) 分割槽方法相比,GPT 具有更多的優點,因為它允許每個磁碟有多達 128 個分割槽,支援高達18 千兆兆位元組的卷大小,允許將主磁碟分割槽表和備份磁碟分割槽表用於冗餘,還支援唯一的磁碟和分割槽ID(GUID)。