在Debian系統(tǒng)中,有效地管理和優(yōu)化數(shù)據(jù)存儲是確保系統(tǒng)性能和穩(wěn)定性的關(guān)鍵。隨著數(shù)據(jù)量的不斷增長,不妨要經(jīng)常監(jiān)控硬盤空間使用情況、配置分區(qū)、設置文件系統(tǒng)以及執(zhí)行高級優(yōu)化技術(shù)變得尤為重要。本教程將介紹一系列的數(shù)據(jù)存儲技巧,幫助系統(tǒng)管理員和用戶充分利用Debian系統(tǒng)中的存儲資源。
啟動系統(tǒng)進入救援模式,可以通過使用 live CD 或 debian-installer CD。這種模式允許輕松地重新配置已連接啟動設備上的數(shù)據(jù)存儲設置。
如果這些設備在圖形用戶界面(GUI)下被自動掛載,可能需要在命令行手動執(zhí)行 umount(8) 命令來卸載它們,以便進行進一步操作。
一、硬盤空間使用情況
硬盤空間的使用情況可以通過 mount、coreutils 和 xdu 軟件包提供的程序來評估:
- mount(8) 顯示所有掛載的文件系統(tǒng)(= 磁盤);
- df(1) 報告文件系統(tǒng)使用的硬盤空間;
- du(1) 報告目錄樹使用的硬盤空間。
可以將 du(8) 的輸出傳輸給 xdu(1x),來使用它的圖形交互式演示,例如 “du -k . |xdu”、“sudo du -k -x / |xdu” 等等。
二、硬盤分區(qū)配置
對于硬盤分區(qū)配置,盡管 fdisk(8) 被認為是標準的配置,但是 parted(8) 工具還是值得注意的。
老的 PC 使用經(jīng)典的主引導記錄(Master Boot Record,MBR)方案,將硬盤分區(qū)數(shù)據(jù)保存在第一個扇區(qū),即 LBA 扇區(qū) 0(512 字節(jié))。
一些帶有統(tǒng)一可擴展固件接口(Unified Extensible Firmware Interface,UEFI)的近代 PC,包括基于 Intel 的 Mac,使用 全局唯一標識分區(qū)表(GUID Partition Table,GPT)方案,硬盤分區(qū)數(shù)據(jù)不保存在第一個扇區(qū)。盡管 fdisk(8) 一直是硬盤分區(qū)的標準工具,但現(xiàn)在 parted(8) 替代了它。
硬盤分區(qū)管理軟件包:
軟件包 | 流行度 | 大小 | 說明 |
util-linux | V:881, I:999 | 5283 | 多種系統(tǒng)工具,包含 fdisk(8) 和 cfdisk(8) |
parted | V:411, I:565 | 122 | GNU Parted,硬盤分區(qū)調(diào)整程序 |
gparted | V:14, I:103 | 2175 | 基于 libparted 的 GNOME 分區(qū)編輯程序 |
gdisk | V:330, I:506 | 885 | 用于 GPT/MBR 并存的硬盤的分區(qū)編輯程序 |
kpartx | V:21, I:34 | 77 | 為分區(qū)建立設備映射的程序 |
盡管 parted(8) 聲稱也能用來創(chuàng)建和調(diào)整文件系統(tǒng),但使用維護最好的專門工具來做這些事會更為安全,例如 mkfs(8)(mkfs.msdos(8)、mkfs.ext2(8)、mkfs.ext3(8)、mkfs.ext4(8)……)和 resize2fs(8)。
為了在 GPT 和 MBR 之間切換,需要直接刪除開頭的幾個塊中的內(nèi)容并使用 “parted /dev/sdx mklabel gpt” 或 “parted /dev/sdx mklabel msdos” 來設置它。請注意,這里使用的 “msdos” 是用于 MBR。
三、使用UUID訪問分區(qū)
盡管重新配置分區(qū)或可移動存儲介質(zhì)的激活順序可能會給分區(qū)產(chǎn)生不同的名字,但可以使用同一個 UUID 來訪問它們。如果有多個硬盤并且 BIOS/UEFI 沒有給它們一致的設備名的話,使用 UUID 是不錯的選擇。
mount(8) 命令帶有 “-U” 選項可以使用UUID 來掛載一個塊設備,而不必使用他的文件名稱,例如 “/dev/sda3”;
- “/etc/fstab”可以使用 UUID;
- 引載加載程序也可以使用 UUID。
可以使用 blkid(8) 來查看一個特定塊設備的 UUID。
也可以使用 “lsblk -f”來檢測 UUID 并查看其它信息。
四、LVM2
LVM2 是一個用于 Linux 內(nèi)核的邏輯卷管理器。使用 LVM2 的話,硬盤分區(qū)可以創(chuàng)建在邏輯卷上來替代物理硬盤。
LVM 有下列需求:
- Linux 內(nèi)核中的設備映射支持(Debian 內(nèi)核默認支持);
- 用戶自定義設備映射支持庫(libdevmapper* 軟件包);
- 用戶自定義 LVM2 工具(lvm2 軟件包)。
請從下面的 man 手冊開始了解 LVM2:
- lvm(8):LVM2 機制的基礎知識(列出了所有 LVM2 命令);
- lvm.conf(5):LVM2 的配置文件;
- lvs(8):報告邏輯卷的相關(guān)信息;
- vgs(8):報告卷組的相關(guān)信息;
- pvs(8):報告物理卷的相關(guān)信息。
五、文件系統(tǒng)配置
對于 ext4 文件系統(tǒng), e2fsprogs 包提供下面的工具:
- mkfs.ext4(8) 創(chuàng)建新的 ext4 文件系統(tǒng);
- fsck.ext4(8) 檢查和修復現(xiàn)有 ext4 文件系統(tǒng);
- tune2fs(8) 配置 ext4 文件系統(tǒng)的超級塊。
debugfs(8) 交互式的調(diào)試 ext4 文件系統(tǒng). (它有 undel 命令來恢復已經(jīng)刪除的文件.)
mkfs(8) 和 fsck(8) 命令是由 e2fsprogs 包提供的,是各種文件系統(tǒng)相關(guān)程序的前端。(mkfs.fstype 和 fsck.fstype). 對于 ext4 文件系統(tǒng),它們是 mkfs.ext4(8) 和 fsck.ext4(8) (它們被符號鏈接到 mke2fs(8) 和 e2fsck(8)).
Linux 支持的每一個文件系統(tǒng),有相似的命令。
文件系統(tǒng)管理包列表:
軟件包 | 流行度 | 大小 | 說明 |
e2fsprogs | V:767, I:999 | 1501 | ext2/ext3/ext4 文件系統(tǒng)工具 |
btrfs-progs | V:44, I:72 | 5078 | Btrfs 文件系統(tǒng)工具 |
reiserfsprogs | V:12, I:25 | 473 | Reiserfs 文件系統(tǒng)工具 |
zfsutils-linux | V:29, I:30 | 1755 | OpenZFS 文件系統(tǒng)工具 |
dosfstools | V:190, I:536 | 315 | FAT 文件系統(tǒng)工具. (Microsoft: MS-DOS, Windows) |
exfatprogs | V:28, I:355 | 301 | exFAT 文件系統(tǒng)工具,由三星維護。 |
exfat-fuse | V:5, I:129 | 73 | FUSE 讀寫 exFAT 文件系統(tǒng)(微軟)驅(qū)動。 |
exfat-utils | V:4, I:116 | 231 | exFAT 文件系統(tǒng)工具,由 exfat-fuse 的作者維護。 |
xfsprogs | V:22, I:96 | 3493 | XFS 文件系統(tǒng)工具. (SGI: IRIX) |
ntfs-3g | V:197, I:509 | 1470 | FUSE 讀寫 NTFS 文件系統(tǒng)(微軟:Windows NT……)驅(qū)動。 |
jfsutils | V:0, I:8 | 1577 | JFS 文件系統(tǒng)工具. (IBM: AIX, OS/2) |
reiser4progs | V:0, I:2 | 1367 | Reiser4 文件系統(tǒng)工具 |
hfsprogs | V:0, I:5 | 394 | HFS 和 HFS Plus 文件系統(tǒng)工具. (Apple: Mac OS) |
zerofree | V:5, I:130 | 25 | 把 ext2/3/4 文件系統(tǒng)上空閑塊設置為零的程序 |
Ext4 文件系統(tǒng)是 Linux 系統(tǒng)上默認的文件系統(tǒng),強烈推薦使用這個文件系統(tǒng),除非有特殊的理由不使用。
Btrfs 狀態(tài)能夠在 Debian wiki on btrfs 和 kernel.org wiki on btrfs 發(fā)現(xiàn)。它被期望作為 ext4 文件系統(tǒng)之后的下一個默認文件系統(tǒng)。
六、掛載選項文件系統(tǒng)創(chuàng)建
mkfs(8) 在 Linux 系統(tǒng)上創(chuàng)建文件系統(tǒng)。fsck(8) 命令在 Linux系統(tǒng)上提供文件系統(tǒng)完整性檢查和修復功能。
- 在文件系統(tǒng)創(chuàng)建后,Debian 現(xiàn)在默認不周期性的運行 fsck;
- 在已經(jīng)掛載的文件系統(tǒng)上運行 fsck ,一般是不安全的。
在 “/etc/mke2fs.conf” 里設置 “enable_periodic_fsck” 并使用 “tune2fs -c0 /dev/partition_name” 設置最大掛載數(shù)為 0,便可以在重啟時,讓 root 文件系統(tǒng)包括在內(nèi)的所有文件系統(tǒng)上,安全的運行fsck(8) 命令.
從啟動腳本里面運行的 fsck(8) 命令結(jié)果,可以在 “/var/log/fsck/” 目錄下查看。
七、優(yōu)化文件系統(tǒng)
“/etc/fstab” 中包含了基礎的靜態(tài)文件系統(tǒng)配置。例如,
?file system? ?mount point? ?type? ?options? ?dump? ?pass? proc /proc proc defaults 0 0 UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 / ext4 errors=remount-ro 0 1 UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
UUID可以替代一般的塊設備名稱(例如 “/dev/sda1”、“/dev/sda2”……)來識別一個塊設備。從 Linux 2.6.30 起,內(nèi)核的默認行為是提供”relatime”選項。
八、超級塊優(yōu)化文件系統(tǒng)
一個文件系統(tǒng)的特性可以使用 tune2fs(8) 命令通過超級塊來優(yōu)化。
- 執(zhí)行 “sudo tune2fs -l /dev/hda1” 可以顯示 “/dev/hda1” 上的文件系統(tǒng)超級塊內(nèi)容;
- 執(zhí)行”sudo tune2fs -c 50 /dev/hda1″ 改變 “/dev/hda1” 文件系統(tǒng)的檢查(在啟動時執(zhí)行 fsck)頻率為每 50 次啟動;
- 執(zhí)行 “sudo tune2fs -j /dev/hda1” 會給文件系統(tǒng)添加日志功能,即 “/dev/hda1” 的文件系統(tǒng)從 ext2 轉(zhuǎn)換為 ext3;
- 執(zhí)行 “sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 && fsck -pf /dev/hda1” 在 “/dev/hda1” 上將它從 ext3 轉(zhuǎn)換為 ext4。
盡管 tune2fs(8) 的名字是這樣的,但它不僅能用于 ext2 文件系統(tǒng),也能用于 ext3 和 ext4 文件系統(tǒng)。
九、硬盤優(yōu)化
在折騰硬盤配置之前,請檢查硬件并閱讀 hdparm(8) 的 man 手冊頁,因為這可能會對數(shù)據(jù)完整性造成相當大的危害。
可以通過 “hdparm -tT /dev/hda” 來測試 “/dev/hda” 硬盤的訪問速度。對于一些使用 (E)IDE 連接的硬盤,可以使用 “hdparm -q -c3 -d1 -u1 -m16 /dev/hda” 來啟用 “(E)IDE 32 位支持”、啟用 “using_dma flag”、設置 “interrupt-unmask flag” 并設置 “multiple 16 sector I/O”(危險?。?,從而加速硬盤訪問速度。
可以通過 “hdparm -W /dev/sda” 來測試 “/dev/sda” 硬盤的寫入緩存功能??梢允褂?“hdparm -W 0 /dev/sda” 關(guān)閉寫入緩存功能。
現(xiàn)代高速 CD-ROM 光驅(qū),可以使用 “setcd -x 2” 降低速度,來讀取不當壓縮的 CDROM 光盤。
十、固態(tài)硬盤優(yōu)化
固態(tài)硬盤(Solid state drive,SSD) 目前可以被自動檢測。在 /etc/fstab 里面,將易失性數(shù)據(jù)路徑掛載為 “tmpfs”,可以減少不必要的磁盤訪問來阻止磁盤損耗。
十一、SMART預測硬盤故障
可以使用兼容 SMART 的 smartd(8) 后臺守護進程(daemon)來監(jiān)控和記錄硬盤。
1、在 BIOS 中啟用 SMART 功能。
2、安裝 smartmontools 軟件包。
3、通過 df(1) 列出硬盤驅(qū)動并識別它們。假設要監(jiān)控的硬盤為 “/dev/hda”。
4、檢查 “smartctl -a /dev/hda” 的輸出,看 SMART 功能是否已啟用。如果沒有,通過 “smartctl -s on -a /dev/hda” 啟用它。
5、通過下列方式運行 smartd(8) 后臺守護進程(daemon)。
- 消除 /etc/default/smartmontools” 文件中 “start_smartd=yes” 的注釋;
- 通過 “sudo systemctl restart smartmontools” 重新啟動 smartd(8) 后臺守護進程(daemon)。
smartd(8) 后臺守護進程(daemon)可以使用 /etc/smartd.conf 文件進行自定義,文件中包含了相關(guān)的警告。
十二、$TMPDIR指定存儲目錄
應用程序一般在臨時存儲目錄 “/tmp” 下建立臨時文件。如果 “/tmp” 沒有足夠的空間,可以通過 $TMPDIR 變量來為程序指定臨時存儲目錄。
十三、LVM擴展存儲空間
在安裝時創(chuàng)建在 Logical Volume Manager 邏輯卷管理(LVM) (Linux 特性) 上的分區(qū),它們可以容易的通過合并擴展或刪除擴展的方式改變大小,而不需要在多個存儲設備上進行大量的重新配置。
十四、擴展可用存儲空間
1、通過掛載另一個分區(qū)來擴展可用存儲空間
如果有一個空的分區(qū)(例如 “/dev/sdx”),可以使用 mkfs.ext4(1) 將它格式化,并使用 mount(8) 將它掛載到需要更多空間的目錄。(需要復制原始數(shù)據(jù)內(nèi)容。)
$ sudo mv work-dir old-dir $ sudo mkfs.ext4 /dev/sdx $ sudo mount -t ext4 /dev/sdx work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir
也可以選擇掛載一個空硬盤映像文件作為一個循環(huán)設備。實際的硬盤使用量會隨著實際存儲數(shù)據(jù)的增加而增加。
2、通過 “mount –bind” 掛載另一個目錄來擴展可用存儲空間
如果在另一個分區(qū)里有一個帶有可用空間的空目錄(例如 “/path/to/emp-dir”),可以通過帶有 “–bind” 選項的 mount(8),將它掛載到一個需要更多空間的目錄(例如 “work-dir”)。
$ sudo mount --bind /path/to/emp-dir work-dir
3、通過 overlay 掛載(overlay-mounting)另一個目錄來擴展可用存儲空間
如果在另一個分區(qū)表中有可用的空間(例如,“/path/to/empty” 和 “/path/to/work”),可以在其中建立一個目錄并堆棧到需要空間的那個舊的目錄(例如,“/path/to/old”),要這樣做,需要用于 Linux 3.18 版內(nèi)核或更新版本(對應 Debian Stetch 9.0 或更新版本)的 OverlayFS。
$ sudo mount -t overlay overlay \ -olowerdir=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work
“/path/to/empty” 和 “/path/to/work” 應該位于可讀寫的分區(qū),從而能夠?qū)懭?“/path/to/old”。
4、使用符號鏈接擴展可用存儲空間
這是一個已棄用的做法。某些軟件在遇到“軟鏈接目錄”時可能不會正常工作。請優(yōu)先使用上文所述的“掛載”的途徑。
如果在另一個分區(qū)里有一個帶有可用空間的空目錄(例如 “/path/to/emp-dir”),可以使用 ln(8) 建立目錄的一個符號鏈接。
$ sudo mv work-dir old-dir $ sudo mkdir -p /path/to/emp-dir $ sudo ln -sf /path/to/emp-dir work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir
別對由系統(tǒng)管理的目錄(例如 “/opt”)使用“鏈接到目錄”,這樣的鏈接在系統(tǒng)升級時可能會被覆蓋。