Skip to content

antony@notes:~/suse$ cat "Storage-Management.md"

Storage Management

2023-04-10· suse ·SUSE Linux Enterprise Server

Storage Management

Preface

:::warning

:::spoiler 文章目錄

[TOC]

:::

Understand the Linux I/O Stack

Linux IO Stack

Local Disks

  • Tools to configure MBR and GPT:
    • YaST
    • fdisk
    • parted

MBR and GPT

GPT 是 UEFI(Unified Extensible Firmware Interface [統一可擴展韌體介面])標準的一部分,是有點老舊的 BIOS 的繼承者。

UEFI 標準已經存在好幾年了,但在過去並沒有得到硬體供應商的廣泛支持,但當微軟將其作為 Windows 8 的一項要求時(約2012年),情況發生了變化。

GPT 克服了傳統的 MBR 分區表的限制,它最多有 4 個主分區,最大的磁碟分大小(512 byte sectors [磁區])為 2 TB。使用 GPT,你可以有 127 個分區,而磁碟的大小可以達到 zettabyte 範圍。

即使你的主板沒有配備 UEFI,你仍然可以使用 GPT,但無法啟動作業系統,也就是說 BIOS 是可以使用 GPT 分區表的硬碟來作為資料碟的,但不能引導系統。

注意:由於設備檔案有主次之分,目前 Linux 中每個磁碟的最大分區數量被限制在 15 個,即使 GPT 可以管理更多的分區。

Master Boot Record(MBR) 的組成

  • Boot loader (446 bytes)
  • Partition table (64 bytes)
  • Magic number (2 bytes)
  • Partition Limited to 2 TB hard disks

Globally Unique Partition Table(GPT) 的組成

  • Protected MBR (512 bytes)
  • GPT Header (512 bytes)
  • Partition entries (128 bytes ea.)
  • Partition Limited to 9.2 ZB hard disks

Device Files for Hard Disks with MBR

  • Primary Partitions:
  • /dev/sdx1, /dev/sdx2, /dev/sdx3, /dev/sdx4
  • One Partition can be an Extended Partition
  • Partitions within an Extended Partition are called Logical Partitions
  • First Logical Partition is /dev/sdx5
  • With GPT you only have primary partitions and they are numbered from 1 on up.

parted vs. fdisk

fdisk

  • Traditional disk partitioning utility(工具)
  • Utilizes a prompt-based interactive user interface (使用提示式互動用戶界面)
  • Must be executed with the disk being partitioned as the argument(參數)
    • Example: fdisk /dev/sda

parted

  • More powerful but more complex partitioning utility
  • Supports GPT and 2TB+ partitions
  • Can detect, create, delete, resize and move partitions containing swap, ext[2,3,4], reiserfs and VFAT file systems

Manage Partitions with parted

  • Select device to edit: select <device>
  • List partitions: print [devices|free]
  • Create partition: mkpart <part-type> [<fs-type>] <start> <end> <part-type>: primary, logical, extended
  • Delete partition: rm <part-number>
  • Resize partition: resize <part-number> <end>
  • Help: help
  • Quit: quit

預設情況下,parted 會嘗試調整分割區的開始和結束位置,以符合磁區大小。如果不可能進行調整,你將會收到警告:

The resulting partition is not properly aligned for best performance.

你可以使用選項 -a <alignment-type> 來改變此行為。有效的 alignment-types (對齊類型)包括:

  • none:使用磁碟類型允許的最小對齊方式。
  • cylinder:將分割區對齊到柱面。
  • minimal:使用 disk topology (磁碟拓撲)資訊中提供的最小對齊方式。
    • 此選項和 opt 值會使用磁碟提供的佈局資訊將邏輯分割表地址對齊到實際磁碟區塊上。
    • min 值是將分割區正確對齊到實體區塊所需的最小對齊,有助於避免效能下降。
  • optimal:使用磁碟拓撲資訊中提供的最佳對齊方式。此選項會將分割區對齊到實體區塊大小的倍數,以保證最佳效能。

Recognize Traditional Linux File Systems

Supported Filesystems

  • Ext2
  • Ext3 (default in SLE11)
  • Ext4
  • XFS (default in SLE12 for data partitions)
  • Btrfs (default in SLE12 for /)
  • JFS (existing volumes only)
  • NTFS-3G (only in SLED)
  • VFAT
  • ReiserFS (default in SLE10) is no longer supported

Ext2 是目前 Linux 支援的最古老和成熟的檔案系統,但它不支援諸如 sub-block allocation (子塊分配)和 journaling (日誌) …等較新的檔案系統功能。

Ext3 是一種成熟穩定的 journaled file system (日誌檔案系統),在 SLE11 中是預設的檔案系統,它是一個適用於各種用途的高效檔案系統,穩定性很好,由於長期使用和開發,所以幾乎沒有錯誤。

Ext4 是 Ext 檔案系統的第四代,同樣支援日誌,但可選擇關閉,與 ext3 相比,Ext4 的其他新功能有:

  • multi block allocation
  • delayed allocation
  • journal checksum
  • fast fsck

XFS 是一種高性能的先進檔案系統,用於 data volumes,可以擴展到非常大的 volume 大小。

ReiserFS 是一種成熟穩定的日誌檔案系統,曾經是 SLE10 的預設檔案系統,但現已被棄用,自 SLE15 起不再支援。

Btrfs 是一種新型的檔案系統,結合了 ext 系列(ext2, ext3, ext4)、Reiser、XFS 和 HP aufs 等檔案系統的優點。Btrfs 解決了一些儲存挑戰,包括

  • Massive Scalability (大規模擴展)
  • Data Integrity (數據完整性)
  • Dynamic Expand and Shrink (動態擴展和收縮)
  • Built-in Volume Management (內建卷管理)
  • 廣泛應用於伺服器、桌面和行動裝置,適合在雲端運作

JFS 是 IBM 開發的較老的檔案系統,現在已經過時,不再開發,且支援有限。

NTFS-3G 是一種在使用者空間中的 fuse(檔案系統),僅包含在桌面發行版(SUSE Linux Enterprise Desktop)中。

VFAT 支援 Microsoft FAT 檔案系統的各種版本,包括 12位元、16 位元和 32 位元的 FAT,還支援長檔案名稱等新功能。

Virtual Filesystem Switch

對於使用者或程式,使用哪種檔案系統格式並不重要,因為它們總是會看到相同的資料介面。這是由 Virtual Filesystem Switch (VFS)(也稱為 virtual file system [虛擬檔案系統])實現的。

VFS 是核心中的抽象層級,為程序提供定義的介面,包括打開檔案、寫入檔案和從檔案讀取等功能。

程式不必擔心檔案存取是如何實現的,VFS 會將這些請求轉發給相應的檔案系統格式驅動程式。

VFS 的其中一個特點是顯示檔案屬性給使用者,這些屬性是從 UNIX 檔案系統格式中得知的,包括存取權限,即使在 FAT/VFAT 中不存在,VFS 也會顯示。

Create File Systems from the CLI

  • mkfs -t <type>
    • mkfs.ext2
    • mkfs.ext3
    • mkfs.ext4
    • mkfs.btrfs
    • mkfs.xfs
    • mkfs.vfat
  • mk2fs

mke2fsmkfs.ext3 等指令,它們用於建立例如 ext2 和 ext3 等檔案系統。

使用 mkfs 指令,它是用於建立檔案系統的實際指令的前端,例如 mkfs.ext2mkfs.ext3mkfs.vfat 等。

當使用 mkfs 時,您需要使用 -t 選項來指定要創建的檔案系統類型,如果沒有指定檔案系統類型,mkfs將自動創建一個 ext2 檔案系統。

當您使用 mkfs 創建 ext2、ext3 或 ext4 檔案系統時,可以使用以下選項:

  • -b <blocksize>:指定檔案系統中資料區塊的大小,可使用 1024、2048 和 4096 等值作為資料區塊大小。
  • -i <bytes_per_inode>:指定檔案系統上要建立多少索引節點。對於 <bytes_per_inode>,您可以使用可用於資料區塊大小的相同值。
  • -j:在檔案系統上創建一個 ext3/ext4 日誌。

如果不包括 -b-i 選項,mkfs 將根據磁碟分割區的大小設置資料區塊大小和索引節點數量。

以下是在一個磁碟分割區上創建 ext3 檔案系統的示例。請注意,按下 Enter 鍵後將直接格式化分割區,不需要進行任何確認:

~> mkfs -t ext3 /dev/sdb6

螢幕輸出 :

mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
264000 inodes, 1053952 blocks
52697 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1082130432
33 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
 32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to
override

上面 mkfs 的例子是在現有的分割區上建立一個 ext3 檔案系統,其值如下:

  • 資料區塊大小=4024 (log=2):資料區塊大小為 4 KB。
  • 264000 個索引節點,1053952 個資料區塊:最大檔案和目錄數量為 62248、總資料區塊數量為 248976。
  • 52697 個資料區塊 (5.00%) 被保留給超級使用者:整個空間的 5% 被保留給系統管理員。如果硬碟已滿 95%,則一般使用者將無法再使用更多空間。

Mount File Systems

在 Windows 系統中,磁碟機透過字母代表不同的磁碟分區。

Linux 系統則不使用字母來指定分區,而是將分區掛載到檔案系統中的目錄上,這些目錄也稱為 mount point (掛載點)。

例如,在 Linux 系統中添加一個新的硬碟,需要先進行分區和格式化,然後使用檔案系統中的目錄(例如 /data/)並使用 mount 指令將該硬碟掛載到該目錄上。

注意:你也可以掛載通過網路檔案系統 (NFS) 共享的遠端檔案系統到你的檔案系統中自行建立的目錄上。

/mnt/ 目錄被預設用來臨時掛載本地和遠端的檔案系統。 所有 removable devices 的預設掛載點為 /rur/media/<user>/<media-label>/

Example of the blkid command:

~> blkid 

螢幕輸出 :

/dev/sda1: UUID="b78aab0b-8dcd-40fa-b0cb-d226513f6fec" TYPE="swap" PARTUUID="000b2809-01"
/dev/sda2: UUID="ae116d46-ebe9-41fe-afe1-c912210d75be" UUID_SUB="15289165-3c20-476b-90bd964863e0848f" TYPE="btrfs" PTTYPE="dos" PARTUUID="000b2809-02"
/dev/sr0: UUID="2014-10-01-09-42-14-00" LABEL="SLE-12-Server-DVD-x86_6409341" TYPE="iso9660"
PTUUID="5fadddb3" PTTYPE="dos"
/dev/sr1: UUID="2014-10-01-09-42-20-00" LABEL="SLE-12-Desktop-DVD-x86_6405501" TYPE="iso9660"
PTUUID="6172016e" PTTYPE="dos"

/etc/fstab

在 Linux 系統中,檔案系統和它們的掛載點(mount points)是在 /etc/fstab 檔案中。每一行都有六個欄位,用於掛載每個檔案系統,這些欄位分別提供以下掛載檔案系統的資訊:

雖然 /etc/fstab 列出了開機時需要掛載的檔案系統及其掛載點,但它不包含任何在開機後掛載的檔案系統的資訊。

/etc/mtab 檔案列出了當前已掛載的檔案系統及其掛載點。mountumount 指令會影響已掛載檔案系統的狀態並修改 /etc/mtab 檔案。

Using mount, you can override the default settings in /etc/fstab.

Mount Options for mount and /etc/fstab

The noauto and user options are usually combined for removable media such as removable medias.

Currently Mounted File Systems

/etc/mtab 列出了當前掛載的檔案系統和它們的掛載點。

在某些情況下,用 mount 指令無法正確顯示已掛載的檔案系統。

核心還保留了/proc/mounts 的信息,它列出了所有當前 mounted partitions (掛載的分區)。

如果 /proc/mounts/etc/mtab 的資訊有衝突,則 /proc/mounts 的資訊總是比 /etc/mtab 更正確和最新。

這種情況可能發生在安裝作業系統到 USB 隨身碟時,若沒有內部硬碟連接,或是重新啟動時未正確掛載 USB 隨身碟等。這些情況可能會讓核心的列舉過程出錯,導致 /etc/mtab/proc/mounts 的資訊不同步。

因此,如果有疑問,就要始終相信 /proc/* 檔案反映的是核心實際看到的東西。/proc/mounts 列出了核心實際掛載的檔案系統,也就是核心真正進行掛載的資訊。

File System Health Tools

df 命令

提供硬碟和它們的分區或其他磁碟在檔案系統中掛載的資訊,以及它們佔用的空間大小。

如果使用不帶參數的 df 命令,會顯示目前所有已掛載檔案系統上的可用空間。

如果提供檔案名稱,df 會顯示此檔案所在檔案系統上的可用空間。

一些有用的選項包括 :

du 命令

提供檔案和目錄佔用的空間資訊。

一些有用的選項包括

lsof 命令

列出開啟的檔案。

如果不使用任何選項輸入 lsof,會列出所有屬於所有活動程序的開啟檔案。

開啟的檔案可以是常規檔案、目錄、設備檔案、庫、串流或網路檔案(Internet socket、NFS 檔案或 UNIX domain socket)。

lsof 命令可以列出當前正在開啟的檔案資訊,也可以使用 -r 選項以重複模式執行,重複顯示輸出結果直到接收到中斷或結束訊號。

一些常用的選項包括

fuser 命令

顯示使用指定檔案或檔案系統的程序 ID。在預設顯示模式下,每個檔案名稱後面跟一個字母,該字母描述訪問方式的類型:

如果沒有存取指定的檔案,或者發生致命錯誤,則顯示非零返回代碼。如果找到至少一個存取,fuser 則返回零。

一些有用的選項 :

fsck 命令

fsck 是一個用來檢查和修復 Linux 檔案系統的指令。

BtrFS 的進階功能需要特定的 BtrFS 工具才能處理。

通常情況下,fsck 會在不同的實體磁碟驅動器上並行運行檔案系統,以減少檢查所有檔案系統所需的總時間。

如果您沒有在命令行上指定檔案系統並且沒有指定 -A 選項,fsck 將按照 /etc/fstab 中的順序順序檢查檔案系統。

fsck 是系統上可用的各種檔案系統檢查器(fsck.<fstype>)的前端。

fsck 工具首先在 /sbin/ 中查找 system-specific checker (系統特定的檢查器),然後在 /etc/fs//etc/ 中查找,最後在列在 PATH 環境變數中的目錄中查找。

要檢查特定的檔案系統,請使用以下語法:fsck <device>

舉例來說,如果您想要檢查 /dev/sda2 這個檔案系統,您可以輸入 fsck /dev/sda2

fsck 提供了一些選項,例如

在 Linux 系統中斷電或沒有將分割區卸載的情況下關閉電腦,可能會導致檔案系統出現錯誤。

下次開機時,會偵測到電腦未正確關閉,並進行檔案系統檢查。如果檔案系統中發現錯誤,會嘗試進行修復。如果無法修復,電腦將無法正常啟動,您需要輸入 root 密碼並提供有關如何解決問題的提示。在檔案系統嚴重損壞的情況下,您甚至可能需要使用救援系統來修復系統。

根據檔案系統的類型,您可以使用相應的工具(例如 /sbin/e2fsck/sbin/reiserfsck/sbin/xfs_check)。這些工具檢查檔案系統的 correct superblock (正確超級塊[位於包含檔案系統結構資訊的分割區開頭的區塊])、有問題的資料區塊或資料區塊配置錯誤。

在 ext2(或 ext3/4)檔案系統中可能的問題是 superblock (超級塊) 的損壞。您可以使用 dumpe2fs 查看檔案系統中所有超級塊的位置。

然後,使用 e2fsck,您可以使用其中一個備份副本,如以下示例:

e2fsck -f -b 32768 /dev/sda1

這個例子是在說明如何使用 ext2 檔案系統的儲存區塊 32768 裡的超級區塊,並在檔案系統檢查完成後適當地更新主要超級區塊。

Note: 在一個 4KB 的區塊大小中,每隔 32768 個區塊就會儲存一個超級區塊的備份。

在 ext2、ext3 和 ext4 檔案系統格式中,有一個特別的 lost+found 目錄。當系統發生崩潰時,Linux 會自動檢查整個檔案系統。那些無法分配名稱的檔案或檔案片段不會直接被刪除,而是會儲存在這個目錄中。

透過檢視這個目錄的內容,您可以試著還原出檔案的原始名稱和用途。


Configure Logical Volume Management (LVM)

LVM

Front end to the device mapper to easily and flexibly(靈活的) manage logical storage

Supports features such as:

LVM Components

LVM 是用來更靈活地管理儲存空間的工具

LVM extents 應該比 4MB 大得多,例如 128MB。這樣可以減少 overhead(開銷)。

LVM extents 應該與儲存空間對齊。這意味著它們應該適合於 1MB 的邊界。可以使用 pvs +o pe_start 命令檢查。

如果可能,volume manager 的 Stripe (條帶)大小應與儲存系統對齊。參見 man lvcreate 中的 --stripes--stripesize 選項。

LVM 層對性能只有輕微的影響。在測試中(多年前)發現了 3-5% 的性能下降。

LVM Configuration File /etc/lvm/lvm.conf

LVM Services

lvmetad 是 LVM 的 Metadata 緩存背景程序。此背景程序接收 udev 規則的通知(在使用 lvmetad 時必須安裝此規則才能正常工作)。

通過這些通知,lvmetad 具有系統中可用 VG 的最新且一致的映像。

預設情況下,即使運行,LVM 也不會使用 lvmetad

Create LVM Physical Volumes

範例 :

~> pvcreate /dev/sda9

螢幕輸出

Physical volume "/dev/sda9" successfully created

View LVM Physical Volume Info

Create and Activate LVM Volume Groups

LVM 開始運作時,並不會自動知道現有的 volume groups,需要先發現它們。

透過 vgscan 搜尋後,LVM 可能會知道 volume groups,但它們尚未啟用。

使用 vgchange 工具也可以更改其他屬性,例如調整大小。

vgcreate 工具用於創建新的 volume group。如果要創建名為 system 的 volume groups 並將 physical volume /dev/sda9 加入其中,請輸入以下命令:

~> vgcreate system /dev/sda9

螢幕輸出

 Volume group "system" successfully created

檢查

~> pvscan

螢幕輸出

PV /dev/sda9 VG system lvm2 [240,00 MB / 240,00 MB free]
 Total: 1 [240,00 MB] / in use: 1 [240,00 MB] / in no VG: 0 [0 ]

View LVM Volume Groups

Examples:

~> vgs

螢幕輸出

VG #PV #LV #SN Attr VSize VFree
vg0 4 0 0 wz--n- 4.09g 4.09g

Values: VG – Volume group name #PV – Number of physical volumes #LV – Number of logical volumes #SN – Snapshot number Attr – Attributes:

  1. Permissions: (w)riteable, (r)ead-only
  2. Resi(z)eable (可調整大小)
  3. E(x)ported (匯出)
  4. (p)artial: one or more physical volumes belonging to the volume group are missing from the system
  5. Allocation(分配) policy: (c)ontiguous, c(l)ing, (n)ormal, (a)nywhere, (i)nherited
  6. (c)lustered

VSize – Size of the volume group VFree – Free space on the volume group

Create LVM Logical Volumes

Logical Volume Types

Logical volumes 的結構和功能不同,因此它們可以是不同的類型 Common Types (the first three are relevant in practice):

  1. Normal
  2. Mirrored
  3. Snapshot
  4. Origin
  5. Special Types
  6. PVmove
  7. Virtual

To create a logical volume, use lvcreate, specifying the size, the name for the logical volume, and the volume group:

~> lvcreate -L 100M -n data system

螢幕輸出

Logical volume "data" created

View LVM Logical Volumes

lvscan shows the device to use for the formatting and mounting:

~> lvscan

螢幕輸出

ACTIVE '/dev/system/data' [100,00 MB] inherit

The lvs command represents the volume type in the first field of the Attr column:

Manage LVM Physical Volumes

在使用 pvremove 從一個 VG 中移除一個 PV 之前,它的內容必須使用 pvmove 移動到另一個 PV 中。

Manage LVM Volume Groups

Extending a Volume Group

Reduce a Volume Group

Manage LVM Volume Groups

Merge(合併) Volume Groups

Split(拆分) Volume Groups

A volume group cannot be removed if any logical volume on it is still open.

lvchange 還允許更改 logical volumes 的其他 attributes (屬性),而不僅僅是 activation (啟動)。

Extend a Logical Volume

Reduce a Logical Volume

LVM Logical Volume Snapshots

LVM Snapshots (快照) 本質上是 logical volumes,創建快照會創建一個新的 logical volume(因此需要 VG 中的未分配空間)。

LVM 快照在時間點凍結 volume 的視圖,而原始 volume 繼續被修改。

LVM 快照可以像任何其他 logical volumes 一樣掛載和訪問。

不再需要快照時,可以刪除快照而不影響原始卷。空間隨後將返回到 VG 作為未分配空間。

使用快照需要加載 dm_snapshot 內核模塊。

創建快照時,metadata 被複製並引用為替代 logical volume。

快照使用 VG 中的未分配空間,就像普通 logical volume 一樣。

LVM 快照使用 copy-on-write。當原始 volume 中的檔案更改時,底層 PE 被複製到快照 volume 中。

如果快照用盡空間,則被丟棄。

Create LVM Snapshots


Configure Software RAID

Multiple Device (MD) RAID

Myths about Software/Hardware RAID

:::info 重要提示:軟體 RAID 不支援集群檔案系統(如 OCFS2),因為 RAID 不支援同時啟動。如果要 OCFS2 的 RAID,需要讓儲存子系統來處理 RAID。 :::

若要在 SLES 機器的開機時啟動 RAID 服務,請使用以下命令:

systemctl enable dmraid-activation.service

RAID Levels

RAID 0

是一種提高數據存取性能的技術,透過將每個檔案的資料區塊分散到多個硬碟驅動器上,來達到此目的。

雖然它的名字中有「RAID」這個詞,但實際上 RAID 0 並不能提供數據備份的功能,它只是將多個硬碟組成一個虛擬硬碟,用以提高存取速度。

RAID 0 的效能非常好,但若其中任何一個硬碟故障,整個 RAID 0 系統就會失效,並且會導致您的數據遺失。

RAID 1

這個等級提供足夠的資料安全性,因為資料會被 1:1 地複製到另一個硬碟上,稱為硬碟鏡像。

如果一個硬碟被損壞,其內容的副本會在另一個鏡像硬碟上提供。除了一個硬碟之外,所有硬碟都可能受損而不會危及您的資料。

然而,如果損壞未被檢測到,損壞的資料可能會被鏡像到正確的硬碟上,從而損壞資料。

與使用單個硬碟訪問相比,在複製過程中寫入效能略有下降(比單個硬碟慢10%至20%),但讀取訪問速度顯著快於任何一個正常的物理硬碟,因為資料是重複的,可以並行掃描。

RAID 1通常提供了近乎是單個硬碟的兩倍讀取事務速率和幾乎相同的寫入事務速率。

RAID 5

RAID 5 是性能和冗餘性方面介於 Level 0 和 Level 1 之間的優化折衷方案。

硬碟空間等於使用的硬碟數減去一。數據像 RAID 0 一樣分佈在硬碟上。

為了安全起見,在其中一個分區上創建奇偶校驗區塊,它們用 XOR 連接在一起,以便在系統故障時,通過相應的奇偶校驗區塊重新構建內容。

使用 RAID 5,同時最多只能故障一個硬碟。如果有一個硬碟故障,必須盡快更換,以避免失去數據風險。

RAID 6

RAID 6 和 RAID 5 相似,最少需要 4 個硬碟,最多允許 2 個硬碟故障。但如果有 3 個硬碟故障,就會丟失數據。

RAID 10

All disks can be lost in a single strip set with no data loss if the other strip set has lost no disks. This RAID implementation combines features of RAID 0 and RAID 1: the data is first mirrored to separate disk arrays, which are inserted into a new RAID 0; type array. In each RAID 1 sub-array, one disk can fail without any damage to the data. A minimum of four disks and an even number of disks is needed to run a RAID 10. This type of RAID is used for database application where a huge load is expected.

如果一組磁碟陣列沒有損失磁碟,那麼在另一組磁碟陣列中失去所有磁碟時也不會喪失任何資料。這種 RAI D結合了 RAID 0 和 RAID 1 的特點:首先將數據鏡像到不同的磁碟陣列中,然後將它們插入到新的RAID 0陣列中。在每個 RAID 1 子陣列中,最多可損失一個磁碟而不會損壞數據。RAID 10 至少需要四個磁碟和偶數個磁碟才能運行。這種 RAID 通常用於預計承受大量負載的數據庫應用程式。

Manage RAIDs: Monitoring

範例 :

~> cat /proc/mdstat

螢幕輸出

Personalities : [raid1]
md0 : active raid1 dm-3[1] dm-2[0]
 243791680 blocks super 1.0 [2/2] [UU]
 [==>..................] resync = 13.0%
(31745408/243791680) finish=100.3min speed=35230K/sec
 bitmap: 2/2 pages [8KB], 65536KB chunk
unused devices: <none>

使用 watch 命令定期執行 cat 命令。 使用 -d 選項可以突顯連續更新之間的差異。例如:

watch -d cat /proc/mdstat

如果您沒有此檔案,您需要首先加載 RAID 核心模塊:modprobe md_mod

mdadm Modes and Options

Create an Array

Assemble(組裝) an Existing Array

Assemble (activate/start) an array:

Deactivate(停用) an Array

Replace a Disk in an Array

  1. Mark a disk in the array as faulty(錯誤):
    mdadm --manage /dev/md0 --fail /dev/sdb1
  2. Remove a disk from the array:
    mdadm --manage /dev/md0 --remove /dev/sdb1
  3. Repeat the above for any other array that uses this physical disk, such as /dev/md1 and /dev/sdb2
  4. 關閉電源並更換磁碟。
  5. (可選)使用 fdisk 或 parted 對磁碟進行分區。
  6. Partitions may not be smaller than before
  7. Add the new disk to your array:
    mdadm --manage /dev/md0 --add /dev/sdb1

Remove an Array

:::danger

NOTE:

  1. To remove an array completely, it has to be stopped first!
  2. Make sure to also delete entries in /etc/fstab relating to the array

:::

Generate a mdadm.conf File

Display Info About an Array

Offline Uncorrectable Sectors

array 會被讀取,如果一個磁區在一個磁碟上無法讀取,則使用其他磁碟中的相同信息重新寫入它。

注意:如果您的 RAID 未覆蓋整個硬盤,它僅在硬盤錯誤位於其中一個 RAID 中時才起作用。

可以設置一個定期執行該命令的 cron 作業。

上述命令通常可以修復錯誤,但是持續出現此類錯誤的磁碟可能應該被替換。

Monitor RAIDs

RAID 系統需要監控,以避免忽略磁碟損壞的問題。

RAID 系統的優點是可以容許單個磁碟故障(不包括 RAID 0)。這表示當磁碟出現故障時,可能不會立即被發現,直到下一個磁碟故障時,數據才會丟失。因此需要監控 RAID 系統以避免出現此類問題。

Define and Describe Btrfs

Btrfs: The “Better” File System

Btrfs Support

FAQ:

  1. Is there any limitation for copy on write in terms of transactions?

    Ans: The disk space in the limitation. As every change may need additional blocks, two sets of parameters must be chosen carefully according to the use case:

  2. Is there a recommendation of how many % of free space should be kept?

    Ans: Since SUSE Linux Enterprise 11 SP2, the default for a root file system on Btrfs is 20 GiB, while the system will need not more than 8 GiB usually. In other words, when starting there should be more than 70% free.

    For safe operation we suggest that a file system is not filled up to more than 90%, i.e. 10% free.

    Future development for snapper might introduce automated cleanup rules also based on free space or fill-level.

Copy on Write

Normal Write

Existing blocks of a file are overwritten when the content changes

Copy on Write

If content of a block changes, the changed block is put beside the non-changed block

Instead the metadata (block-list) changes

Benefit

Implementation of “transactions” in the file system is easy, as old content is still available

因為 Btrfs 對所有的檔案系統寫入都是寫時復制,所以有可能進入這樣一種情況:當檔案系統變滿時,當你試圖刪除一個檔案時,你會得到一個錯誤,說 “no space left on device”,檔案不能被刪除。

如果出現這種情況,你可以嘗試一些事情:

  1. 如果你不是在一個時間緊迫的情況下,運行:

    btrfs filesystem df <mountpoint>。

    如果報告說你的數據和 metadata 都有可用的空間,運行以下程序:

    btrfs filesystem balance<mountpoint>。

    這將需要一些時間,但應該會釋放出一些空間,讓你能夠刪除檔案。

  2. 如果你處於時間緊迫的情況下,你可以嘗試兩種不同的方法,或者如果第一種方法不起作用: 通過運行以下命令,來凍結該檔案:

    echo > <file_name>

    這將在不引起任何新的 metadata 操作的情況下刪除該檔案 用nodatacow選項重新掛載該檔案系統:

    mount -o remount,nodatacow<mountpoint>。

    這將允許你在不執行寫時復制操作的情況下刪除該檔案

Subvolumes

A Btrfs consists of one or more subvolumes. Subvolumes in Btrfs have a number and a name. There is always at least one subvolume, the tree root subvolume with the number 0. The root subvolume is represented by the @ character.

Subvolumes appear as directories in the file system and, at first glance, cannot be distinguished from regular directories. Usually they appear as a subdirectory in the “parent” file system, but they can be mounted separately and not “just a subdirectory”.

Subvolumes can include a complete file system tree.

Subvolumes are simliar to two “separate” file systems, which are using the same pool of data blocks (and other infrastructure). The benefits of using subvolumes are:

Manage Subvolumes from the CLI

Mount a subvolume

Understand NFSv4

Software ManagementDeploying Operating Systems to New Devices Using SUSE Manager Autoinstallation