Skip to main content

6.1. Storage: Phân vùng, swap, file system và mount

Mục lục​


1. Phân vùng và cách Linux gọi tên ổ đĩa​

Có một chiếc SSD 2 TB và nhu cầu cài cả Windows lẫn Ubuntu lên đó. Rắc rối lộ ra ngay: Windows dùng file system NTFS, Ubuntu dùng ext4, và không thể trộn lẫn vùng dữ liệu của Windows với vùng dữ liệu của Ubuntu trên cùng một khối lưu trữ.

Lời giải là chia không gian lưu trữ của chiếc SSD đó ra: dành 1 TB cho Windows, 1 TB cho Ubuntu. Việc chia một thiết bị lưu trữ theo cách này gọi là partitioning. Kết quả có hai partition, mỗi partition 1 TB. Windows ghi NTFS lên partition thứ nhất, Ubuntu ghi ext4 lên partition thứ hai. Hai bên tách biệt về mặt logic, mỗi hệ điều hành tự làm việc của mình mà không đụng vào phần của bên kia.

Để xem một hệ thống Linux đang có những partition nào, lệnh đầu tiên cần nhớ là lsblk, viết tắt của list block devices:

lsblk

# Output (minh họa):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1.8G 0 part /boot
└─sda3 8:3 0 48.2G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 23.5G 0 lvm /

Những gì hiện ra trong output này được gọi là block device, có thể hình dung như các khối không gian lưu trữ, tức những nơi Linux ghi dữ liệu vào hoặc đọc dữ liệu ra. Không phải mọi dòng trong output đều là partition: chỉ những dòng có chữ part ở cột TYPE mới là partition. Ở ví dụ trên, sda là ổ đĩa ảo và nó chứa ba partition sda1, sda2, sda3. Dòng cuối có chữ lvm là thứ do Logical Volume Manager quản lý, được bàn riêng ở Part 6.2: LVM và remote storage.

Tên thiết bị không đặt ngẫu nhiên. Trên máy ảo, thiết bị lưu trữ ảo đôi khi bắt đầu bằng chữ v, ví dụ vda, vdb. Trên máy thật thường thấy sda, sdb: chữ s đến từ Serial, vì ổ đĩa cắm vào cổng SATA (Serial ATA) trên mainboard. Với thiết bị NVMe, tên bắt đầu bằng nvme. Chữ cái và con số ở cuối tên cho biết chính xác đang nói tới ổ nào và partition nào: sda là ổ thứ nhất, sdb là ổ thứ hai, sdc là ổ thứ ba, theo đúng thứ tự chữ cái từ A tới Z. Con số cuối là số thứ tự partition trên đúng ổ đó. Nhìn sdb3 là đọc được ngay: chữ b cho biết đây là thiết bị lưu trữ thứ hai, số 3 cho biết đây là partition thứ ba, nên sdb3 chính là partition thứ ba của ổ đĩa thứ hai.

Mọi block device đều là một file trong dev​

Trong Linux có câu "everything is a file", và điều đó đúng cả với partition. Mọi block device vừa liệt kê đều được tham chiếu qua các file nằm trong thư mục /dev. Partition đầu tiên của ổ đĩa đầu tiên nằm ở file /dev/sda1, và file này cho quyền truy cập trực tiếp vào partition đó. Bên cạnh đó còn có file trỏ tới nguyên cả thiết bị: /dev/sda1 trỏ tới một partition, còn /dev/sda trỏ tới toàn bộ ổ đĩa.

Đọc thông tin partition bằng fdisk​

fdisk là một utility phân vùng được cài sẵn. Dùng nó với tên thiết bị sẽ ra danh sách partition trên block device đó:

sudo fdisk -l /dev/sda

sudo là bắt buộc, vì chỉ user root có quyền đọc và ghi vào các special device như /dev/sda, /dev/sda1 và những file tương tự.

Output của fdisk -l có hai con số đáng để dừng lại tính toán. Giống như một mét được chia thành một nghìn milimet, một thiết bị lưu trữ được chia thành các sector. Khi thấy sector size là 512 byte và partition đầu tiên bắt đầu ở sector 2048, suy ra được partition đó bắt đầu sau 512 × 2048 byte, tức 1.048.576 byte, đúng bằng 1 MB hay 2 lũy thừa 20. Nghĩa là trước partition đầu tiên có 1 MB không gian trống: sector 0 đến 2047 không thuộc partition nào. Để trống 1 MB ở đầu ổ đĩa là thủ tục chuẩn, dành chỗ cho trường hợp cần cài một chương trình đặc biệt gọi là bootloader vào vùng đó.

Trên một số thiết bị lưu trữ, sector size là 4096 byte. Khi đó phải nhân số sector với 4096 thay vì 512.


2. Partition table MBR và GPT​

fdisk cũng tạo và xóa được partition, nhưng có một utility dễ dùng hơn là cfdisk. Trước khi gọi tới nó, cần hiểu thứ mà cả hai công cụ này đang sửa.

Dữ liệu trên ổ đĩa chỉ là một dãy số 0 và 1 liên tục, nên hệ điều hành phải có cách nào đó để biết một partition bắt đầu ở đâu và kết thúc ở đâu. Đó là một trong các nhiệm vụ của partition table. Với định dạng cũ, được dùng suốt nhiều thập kỷ, bảng này được lưu ở đầu ổ đĩa, trong vùng gọi là MBR (Master Boot Record). Ngày nay nhiều hệ thống đã chuyển sang GPT, vì GPT có nhiều lợi thế: partition table trong GPT ít có khả năng bị hỏng hơn, cho phép nhiều primary partition hơn hẳn, và kích thước partition tối đa lớn hơn nhiều.

Trước khi tạo bất cứ partition nào đều phải quyết định dùng MBR hay GPT. Phần lớn trường hợp nên chọn GPT. Chỉ khi làm việc với hardware rất cũ mới buộc phải dùng MBR, vì máy tính đời cũ chỉ boot được với partition table dạng MBR. Trong cfdisk, nếu cần MBR thì chọn DOS: trong utility này, DOS tương đương với MBR.

Partition table: MBR vs GPTMBR partition tableMBRPartition 1Partition 2Table sits in the first sectorsAt most 4 primary partitionsSmaller maximum partition sizeMore likely to get corruptedNeeded only on very old hardwareListed as DOS inside cfdiskBoot support on legacymachines onlyGPT partition tableGPTP1P2P3P4+Table far less likely to corruptMany more primary partitionsMuch larger partition sizesMost systems have moved to GPTDefault choice for a new diskChosen in cfdisk as GPTUse GPT unless thehardware cannot boot it

3. Chia phân vùng bằng cfdisk​

Giả sử vừa gắn thêm một ổ đĩa thứ hai vào máy. Mở nó bằng cfdisk, với tên thiết bị cho biết đây là ổ thứ hai:

sudo cfdisk /dev/sdb

Vì ổ này còn mới, cfdisk hỏi loại partition table trước. Chọn GPT. Nếu có lúc nào cần MBR thì chọn DOS.

Bài tập đặt ra: một ổ 10 GB, cần hai partition. Một partition 8 GB để cài hệ điều hành mới, và 2 GB cho swap.

Tạo, resize và sắp xếp lại partition​

Để tạo partition mới, di chuyển tới vùng free space muốn dùng rồi chọn nút New ở phía dưới. Cả hai thứ cần chọn đều đã được chọn sẵn nên chỉ cần nhấn Enter. Kích thước mặc định 10 GB không đúng ý, nên xóa nó đi và ghi 8 GB.

Hai phím mũi tên lên và xuống dùng để di chuyển giữa các partition và các vùng free space, hai phím mũi tên trái và phải dùng để di chuyển giữa các nút. Nhấn mũi tên xuống để chọn phần free space còn lại rồi chọn New lần nữa, giữ kích thước mặc định 2 GB và nhấn Enter.

Giờ đổi ý: muốn ba partition, nhưng đã hết free space. Cách xử lý là đi lên partition đầu tiên bằng mũi tên lên, nhấn mũi tên trái để chọn Resize, rồi gõ 4 GB làm kích thước mới. Lúc này xuất hiện free space ở giữa ổ đĩa, và chọn New để phân vùng luôn chỗ đó.

Và đây là chỗ dễ nhầm. Partition 2 GB tạo lúc trước nằm ở cuối ổ đĩa nhưng lại hiện ra với tên sdb2, trong khi partition vừa tạo ở giữa ổ lại nhận số lớn hơn. Lý do: partition được đánh số theo thứ tự chúng được tạo ra, không theo vị trí vật lý trên thiết bị lưu trữ. Để sửa, nhấn mũi tên phải cho tới khi tới nút Sort rồi nhấn Enter. Thao tác này sắp xếp lại các partition theo thứ tự tự nhiên hơn, đúng theo vị trí của chúng trên thiết bị lưu trữ.

Bài giảng gốc gọi nút này là Start. Menu thật của cfdisk không có nút tên Start: nút sắp xếp theo start-sector là Sort, còn --zero mới là tùy chọn khởi động với partition table rỗng trong bộ nhớ.

Để thử cho quen tay, di chuyển tới partition thứ ba và chọn Delete, rồi chọn New để tạo lại nó.

Partition type và nút Write​

Còn một nút nữa là Type. Chọn sdb3 trước khi nhấn Enter trên nút Type. Partition 2 GB tại /dev/sdb3 được dự định dùng làm swap, và trong danh sách có sẵn loại partition tương ứng, nằm ngay phía trên lựa chọn hiện tại. Chọn nó rồi nhấn Enter.

Mặc định, partition tạo bằng cfdisk có type là Linux filesystem, phù hợp để lưu dữ liệu chung. Hệ điều hành, chương trình, file cá nhân và những thứ tương tự hiếm khi cần đổi partition type. Một ngoại lệ là partition swap như vừa làm. Một tình huống khác là khi cần tạo boot partition: khi đó chọn type EFI System.

Một chi tiết phải nhớ cho kỹ: tới thời điểm này cfdisk chưa tạo partition nào cả. Dưới góc nhìn của nó, tất cả những gì vừa làm chỉ là một bản kế hoạch chờ được thi hành. Nó ghi nhận muốn có partition nào, type gì, kích thước bao nhiêu, cái nào muốn xóa, nhưng không thay đổi gì trên ổ đĩa cho tới khi nút Write được nhấn. Cơ chế đó cho cơ hội quay lại khi sửa nhầm: nếu phát hiện vừa chỉnh sai partition, chỉ cần chọn Quit và không có gì bị thay đổi.

Khi muốn áp dụng thật, nhấn nút Write, gõ yes và nhấn Enter. Phải nhìn thấy dòng thông báo ở dưới cùng cho biết partition table đã được thay đổi, rồi mới nhấn nút Quit để thoát khỏi ứng dụng.

lsblk

# Output (minh họa):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 4G 0 part
├─sdb2 8:18 0 4G 0 part
└─sdb3 8:19 0 2G 0 part

Cấu trúc partition đã được tạo đúng như dự định. Phần tiếp theo biến sdb3 thành một vùng swap dùng được.


4. Swap partition và swap file​

Swap là vùng mà Linux có thể tạm thời chuyển một phần dữ liệu từ RAM của máy tính ra. Để hiểu cơ chế này, lấy một tình huống đơn giản hóa quá mức.

Một máy tính có 4 GB RAM. Mở một chương trình edit video, nó chiếm 2 GB RAM. Mở thêm một chương trình edit audio, nó cần 2 GB nữa. Lúc này hết bộ nhớ trống. Nhưng máy có một swap partition 2 GB, và dù không còn RAM, Chrome vẫn mở được.

Chuyện xảy ra như sau. Linux thấy không còn RAM trống, nhưng cũng thấy chương trình edit video đã không được dùng trong một giờ qua, nó chỉ đang ngủ ở đó, không hoạt động gì. Linux quyết định chuyển dữ liệu trong bộ nhớ của chương trình edit video ra swap partition. Việc chuyển dữ liệu từ RAM sang swap giải phóng 2 GB RAM, và Chrome dùng được chỗ trống đó.

How swap frees up RAMStep 1: RAM is fullRAM 4 GBVideo editor2 GB, idleAudio editor2 GB, activeSwap2 GB freeChrome asks for memory,but nothing is left in RAMswap outStep 2: after swappingRAM 4 GBChromeuses the freed 2 GBAudio editorstill in RAMSwapVideoeditor 2 GBLinux moves idle pages out of RAM into swap, then hands the free RAM to the new process.

Dùng một partition làm swap​

Kiểm tra xem hệ thống có đang dùng vùng swap nào không:

swapon --show

Chưa thiết lập swap nên lệnh không in ra gì. Partition /dev/vdb3 đã được tạo riêng cho mục đích này ở phần trên và hiện còn trống, không có dữ liệu bên trong. Trước khi dùng được làm swap, nó phải được chuẩn bị. Quá trình này giống việc format một USB với file system như FAT32 hay NTFS: ghi một chút dữ liệu header lên partition và gắn nhãn cho nó, để hệ thống biết đây là vùng dành cho swap.

sudo mkswap /dev/vdb3

Bài giảng gốc còn dùng thêm một option verbose để mkswap in ra nhiều chi tiết hơn về việc nó đang làm.

sudo swapon /dev/vdb3
swapon --show

# Output (minh họa):
NAME TYPE SIZE USED PRIO
/dev/vdb3 partition 2G 0B -2

Vẫn còn một vấn đề: reboot máy là /dev/vdb3 không còn được dùng làm swap nữa, vì thay đổi vừa rồi chỉ có tính tạm thời. Cách bảo Linux tự động dùng nó làm swap mỗi lần boot nằm ở mục 7.

Để thôi dùng partition này làm swap:

sudo swapoff /dev/vdb3

Dùng một file thường làm swap​

Thay vì partition, một file thường cũng dùng được làm swap. Thực tế, cài Ubuntu trên máy tính cá nhân thì mặc định hiện nay nó làm đúng như vậy: thiết lập swap trên một file.

Để làm thủ công, trước tiên tạo một file rỗng và lấp đầy nó bằng các số 0, tức số 0 nhị phân, vì trong nhị phân mọi thứ chỉ có thể là 0 hoặc 1. Công cụ dùng ở đây là dd:

sudo dd if=/dev/zero of=/swap bs=1M count=128

Từng tham số có nghĩa riêng. if là input file, ở đây là /dev/zero, một special device sinh ra vô hạn số 0 khi có ứng dụng đọc từ nó. Sau khi đọc từ file đó, phải nói cho dd biết ghi output ra đâu: of là output file, ở đây là đường dẫn /swap. bs là block size, đặt bằng 1 MB. Kết hợp với tham số kế tiếp count=128, lệnh này yêu cầu dd ghi một block 1 MB lặp lại 128 lần, nên tổng cộng được 128 MB.

File này nhỏ nên được ghi rất nhanh. Với file lớn thì phải chờ một lúc, và dd không hiện phần trăm đã ghi được. Thêm tham số status=progress để nó hiển thị tiến độ trong lúc ghi:

sudo dd if=/dev/zero of=/swap bs=1M count=2048 status=progress

User thường không được phép đọc file swap này, vì nếu đọc được thì họ có khả năng xem được nội dung bộ nhớ của những chương trình mà người khác đang dùng. Vì vậy permission phải được đặt lại sao cho chỉ root đọc và ghi được:

sudo chmod 600 /swap

Phần format thành swap thì giống như trước, chỉ khác là thay vì chỉ vào một file đại diện cho partition như /dev/vdb3, lệnh dùng một file thường:

sudo mkswap /swap
sudo swapon /swap
swapon --show

# Output (minh họa):
NAME TYPE SIZE USED PRIO
/dev/vdb3 partition 2G 0B -2
/swap file 128M 0B -3

Output cho thấy một điểm đáng nhớ: nhiều thứ khác nhau được dùng làm swap cùng lúc. Ở đây vừa có partition vdb3 vừa có file /swap, và số lượng file hay partition dùng làm swap là tùy nhu cầu.


5. Tạo file system với mkfs​

Để lưu được file và directory bên trong một partition, trước hết phải tạo file system trên đó. Mặc định, các hệ điều hành Red Hat dùng file system XFS, còn Ubuntu dùng ext4, nên phần này đi qua cả hai. Lưu ý rằng các mặc định này có thể thay đổi trong tương lai, vì chúng đã từng thay đổi trong quá khứ.

sudo mkfs.xfs /dev/sdb1
sudo mkfs.ext4 /dev/sdb2

mkfs đến từ make file system, phần đuôi sau dấu chấm cho biết định dạng cần tạo. Với hai lệnh trên, các thiết lập mặc định được dùng, và chúng phù hợp cho phần lớn mục đích.

XFS và các option khi tạo​

Mọi file system đều có các thiết lập chỉnh được. Danh sách những thiết lập đó nằm trong manual của lệnh:

man mkfs.xfs

Phần đuôi .xfs cho biết đây là manual của mkfs dành riêng cho XFS. Trong đó có option -L để chọn nhãn cho file system. Để xem option này dùng ra sao, nhấn / rồi gõ -L để tìm, nhấn n để nhảy tới kết quả tiếp theo. Manual cho biết nhãn phải khá ngắn, tối đa 12 ký tự. Nhãn nêu trong bài giảng gốc là backup volume, nhưng chuỗi đó dài 13 ký tự nên vẫn cần cắt ngắn lại trước khi dùng thật. Ở phần kiểm tra cuối, file system XFS trong lab mang nhãn FirstFS.

sudo mkfs.xfs -L FirstFS /dev/sdb1

Lệnh này in ra bảng các option mặc định mà nó đã dùng để tạo file system. Ngoài cách tra manual, còn một cách nhanh hơn để xem các option chỉnh được của XFS: gõ lệnh mà không kèm đối số nào.

mkfs.xfs

Lệnh sẽ báo lỗi vì không có tên thiết bị, nhưng cũng in ra một danh sách rút gọn các option dùng được. Trong đó có option chọn kích thước inode. Bên trong một inode lưu các thứ như thuộc tính của file, ví dụ ngày tạo file. Inode lớn hơn thì lưu được nhiều thuộc tính hơn, chẳng hạn các extended attribute, phần được bàn ở Part 6.3: ACL và file attribute. Để dùng inode size 512 byte, truyền option -i:

sudo mkfs.xfs -i size=512 /dev/sdb1

Lần này utility báo rằng đã có file system tồn tại trên partition. Hành vi đó có lợi, vì nó ngăn việc ghi đè nhầm lên file system khác. Khi chắc chắn không cần dữ liệu trên partition và muốn ghi đè lên bất cứ thứ gì đang có ở đó, dùng option -f để ép format. Nhiều option kết hợp được với nhau: ép format, đặt inode size 512 byte, và đặt luôn nhãn cho file system:

sudo mkfs.xfs -f -i size=512 -L FirstFS /dev/sdb1

Gõ xfs rồi nhấn Tab sẽ ra danh sách các utility của XFS. Trong đó xfs_admin dùng để thay đổi thiết lập trên file system đã được tạo xong, hữu ích khi gắn nhãn sai. Option -l chữ thường hiển thị nhãn hiện tại, option -L chữ hoa đổi nhãn, giống cách dùng với lệnh mkfs:

sudo xfs_admin -l /dev/sdb1
sudo xfs_admin -L FirstFS /dev/sdb1

ext4, inode và tune2fs​

Các option của ext4 tra được theo cách tương tự:

man mkfs.ext4

Điều lạ là manual mở ra lại thuộc một lệnh tên mke2fs. Đó là tên gốc của lệnh xử lý việc tạo file system họ ext, ít nhất là từ ext phiên bản 2. Sự khác biệt tên gọi này không gây ảnh hưởng gì: mke2fs và mkfs.ext4 cùng trỏ tới một chương trình, và mke2fs dễ nhớ hơn khi gõ lệnh.

Cách xem nhanh các option cũng giống XFS: gõ lệnh không kèm đối số.

mkfs.ext4

Cách dùng rất giống mkfs.xfs. Tạo file system ext4 với option mặc định:

sudo mkfs.ext4 /dev/sdb2

Nếu file system đã được tạo rồi thì chạy lại lệnh này sẽ ra cảnh báo, hỏi proceed anyway kèm lựa chọn yes hoặc no. Đó là cách tốt để biết mình không ghi đè nhầm lên một file system đang có.

Trên ext4 có một chuyện lạ xảy ra được: còn hàng trăm GB trống nhưng lại không tạo thêm được file nào. Nguyên nhân là hết inode. Mỗi file hoặc directory tiêu một inode, và hết inode thì không file hay directory nào được tạo thêm. Trên hệ thống dự kiến chứa nhiều file nhỏ, nên chọn số inode lớn ngay từ lúc tạo file system:

sudo mkfs.ext4 -N <số inode mong muốn> /dev/sdb2

Với XFS đã có xfs_admin để sửa thuộc tính của file system đang tồn tại. Với ext4 thì utility tương ứng nằm ở cuối manual, trong phần gợi ý các công cụ liên quan tới ext4, và đó là tune2fs. Option -l chữ thường xem thuộc tính hiện tại, -L chữ hoa đổi nhãn:

sudo tune2fs -l /dev/sdb2
sudo tune2fs -L SecondFS /dev/sdb2

Mở lại cfdisk trên thiết bị vừa làm việc là kiểm tra được kết quả:

sudo cfdisk /dev/sdb

Ở đó hiện ra nhãn và loại file system của các file system mới: FirstFS dùng XFS, SecondFS dùng ext4.


6. Mount và umount thủ công​

File system đã được tạo, nhưng vẫn chưa có cách nào truy cập vào nó. Tạo file và directory trên đó bằng cách nào? Phải mount nó trước. Mount nghĩa là gắn hay cắm một file system vào một trong các directory của hệ thống.

Thư mục /mnt thường được dùng để mount tạm một file system nào đó, và nó đang trống. Mount file system XFS đã tạo ở phần trên, hiện nằm trên partition /dev/vdb1:

ls /mnt
sudo mount /dev/vdb1 /mnt
sudo touch /mnt/file1
ls /mnt

# Output:
file1

File system từ chỗ trống rỗng giờ đã có một file bên trong, và lsblk xác nhận file system đó đang được mount. Để unmount, dùng lệnh umount. Lệnh này không có chữ n, dù theo trực giác nhiều người sẽ gõ thành unmount. Đối số truyền vào là directory nơi file system đang được mount:

sudo umount /mnt
lsblk
ls /mnt

lsblk xác nhận file system đã được unmount, và /mnt trở lại thành một directory rỗng không có gì bên trong.

From raw disk to a usable directoryCheck with:Physical or virtual disk/dev/sdb or /dev/vdb, the whole devicelsblkcfdisk /dev/sdbPartition/dev/sdb1, a slice of the devicefdisk -lmkfs.xfs /dev/sdb1File systemXFS or ext4 written onto the partitionblkidmount /dev/sdb1 /mybackupsMount point/mybackups, where files finally appearfindmntEach layer stays unusable until the layer above it exists.

7. Mount tự động lúc boot​

Trong output của lsblk có thể thấy một số file system trên một số partition đã được mount sẵn. Chẳng hạn /dev/vda2 được mount vào directory /boot. Khi một hệ điều hành Linux boot lên, nó tự động mount một số file system, theo hướng dẫn ghi trong file /etc/fstab.

The six fields of an fstab line1/dev/vdb12/mybackups3xfs4defaults50621. Block device, UUID or remote share to mount2. Mount point directory, or none for swap3. File system type: xfs, ext4, swap, nfs4. Mount options, defaults or a comma list5. dump backup flag: 0 off, 1 on6. fsck order: 0 never, 1 root first, 2 afterSwap lines use none in field 2 and swap in field 3, with 0 0 at the end.

Sáu field của một dòng fstab​

Mở file ra sửa:

sudo vim /etc/fstab

Dòng cần thêm để tự động mount file system XFS ở /dev/vdb1 vào directory /mybackups:

/dev/vdb1 /mybackups xfs defaults 0 2

Mỗi dòng trong /etc/fstab có sáu field, và từng field mang một ý nghĩa riêng.

  • Field thứ nhất thường trỏ tới file block device đại diện cho một partition hay một dạng không gian lưu trữ nào đó. Ở dòng trên, đó là file block device /dev/vdb1, đại diện cho partition đầu tiên của ổ đĩa ảo thứ hai. Viết /dev/vdb1 vào field này nghĩa là nói với Linux rằng hãy mount file system chứa trong partition tại /dev/vdb1.
  • Field thứ hai chỉ định mount point, tức directory muốn mount file system vào, ở đây là /mybackups.
  • Field thứ ba chỉ định loại file system, ở đây là xfs. Nếu muốn tự động mount /dev/vdb2 thay vì /dev/vdb1 thì field này phải là ext4, vì file system trên partition kia là ext4.
  • Field thứ tư chứa mount option. Giá trị defaults nghĩa là dùng option mount mặc định, còn các option tự chọn nằm ở mục 8.
  • Field thứ năm quyết định utility tên dump có backup file system này hay không. Giá trị 0 là tắt backup, 1 là bật. dump hiện nay rất ít được dùng, nên để 0 là được.
  • Field thứ sáu quyết định chuyện gì xảy ra khi phát hiện lỗi, vì file system đôi khi vẫn bị hỏng. Field này nhận ba giá trị. Giá trị 0 nghĩa là file system không bao giờ bị quét lỗi. Giá trị 1 nghĩa là file system này được quét lỗi trước tất cả các file system khác. Giá trị 2 nghĩa là nó được quét sau những file system mang giá trị 1. Trên thực tế thường ghi 1 cho root file system nơi hệ điều hành được cài, và ghi 2 cho mọi file system còn lại.

Nếu muốn mount file system nằm trên partition thứ hai thì dòng sẽ có dạng như sau, nhưng dòng này không được dùng ở đây vì nó xung đột với dòng phía trên, cũng đang tự động mount vào /mybackups:

/dev/vdb2 /mybackups ext4 defaults 0 2

Sửa /etc/fstab xong mà không reboot thì systemd, daemon lo các việc quan trọng trong hệ điều hành, chưa biết gì về thay đổi vừa rồi. Lệnh dưới đây ép nó đọc lại những file cấu hình quan trọng, bao gồm /etc/fstab. Nếu reboot thì nó tự đọc lại, chi tiết về systemd nằm ở Part 3.1: Boot và systemd service.

sudo systemctl daemon-reload

Ngay lúc này, ls /mybackups cho thấy directory rỗng như dự kiến, và lsblk cho thấy chưa có gì được mount vào /mybackups. Nhưng sau khi reboot rồi SSH vào lại, cũng lệnh đó sẽ hiện ra file đã tạo trên file system XFS ở phần trước, và lsblk xác nhận file system được tự động mount vào /mybackups lúc hệ điều hành boot lên.

Thông thường, nhìn các dòng có sẵn trong /etc/fstab là đoán ra được cần ghi gì. Khi quên ý nghĩa từng field, lệnh man fstab rất hữu dụng.

Swap partition /dev/vdb3 tạo ở phần trước cũng nên được mount tự động lúc boot. Dòng cần thêm:

/dev/vdb3 none swap defaults 0 0

Dòng này giống dòng cho file system XFS, chỉ khác ở hai field thứ hai và thứ ba. Field thứ hai lẽ ra chứa mount point, tức directory trong file system mà nó cần được mount vào, nhưng ở đây ghi none, vì swap không dành để mount vào directory nào. Field thứ ba, loại file system, ghi là swap. Hai field cuối ghi 0 0, vì swap không dành để backup hay quét lỗi. Reboot rồi chạy swapon --show là thấy swap partition đã được mount tự động lúc boot.

Vì sao nên dùng UUID thay cho tên thiết bị?​

Trong /etc/fstab còn có những dòng trỏ vào /dev/disk, thường kèm một dòng comment phía trên. Các dòng đó có thể tương đương với một thứ như /dev/vda2 được mount vào directory /boot, nghĩa là chúng hoàn toàn viết lại được theo dạng tên block device.

Vậy tại sao lại dùng UUID, tức universally unique identifier, thay cho một block device như /dev/vda2? Lấy một server thật với hai SSD cắm vào các cổng SATA trên mainboard. SSD thứ nhất nằm ở /dev/sda, SSD thứ hai ở /dev/sdb. Nhưng nếu rút cáp SATA ra rồi cắm ngược thứ tự lại trên mainboard, SSD thứ nhất có thể xuất hiện ở /dev/sdb thay vì /dev/sda trong lần boot kế tiếp. Linux gán các tên thiết bị kiểu /dev/vda hay /dev/vdb theo thứ tự chúng được nối vào mainboard. Mount sai thứ vào sai chỗ vì tên thiết bị đã đổi thì hậu quả rất tệ. UUID giải quyết chuyện này, vì nó giữ nguyên dù thứ tự cắm thiết bị lưu trữ có thay đổi.

sudo blkid
ls -l /dev/disk/by-uuid

Lệnh thứ nhất cho biết UUID của các block device. Lệnh thứ hai liệt kê các identifier duy nhất đó cùng block device mà chúng thật sự trỏ tới. Lấy đúng cái cần dùng từ đây rồi ghi theo dạng /dev/disk/by-uuid kèm identifier vào field thứ nhất của một dòng trong /etc/fstab.


8. Mount option​

lsblk cho một cái nhìn tổng quan gọn gàng về cái gì đang được mount ở đâu, ngắn và đúng trọng tâm. Nhưng đôi khi cần chi tiết hơn: file system nào đang mount ở đây, và mount option của nó là gì. Lệnh hiển thị mọi thứ đang được mount trên hệ thống là findmnt.

findmnt

Lệnh này in ra rất nhiều dòng, vì findmnt hiện mọi mount point, kể cả các thứ ảo. Ví dụ proc là một file system ảo được mount vào directory /proc. File system này không tồn tại trên thiết bị lưu trữ nào, nó chỉ nằm trong bộ nhớ của máy tính. Khi không cần xem các thứ ảo đó, bảo findmnt chỉ hiện file system thật bằng option -t, tức type:

findmnt -t xfs,ext4

# Output (minh họa):
TARGET SOURCE FSTYPE OPTIONS
/ /dev/vda1 ext4 rw,relatime
/mybackups /dev/vdb1 xfs rw,relatime

Output gọn hơn nhiều và dễ đọc hơn. Một lưu ý khi vận hành: findmnt chỉ hiện những file system đang được mount. Những file system tồn tại trên một partition nào đó nhưng chưa được mount thì không xuất hiện trong output này.

Option độc lập với file system​

Cột OPTIONS là nơi findmnt hiển thị mount option. Hiệu ứng của chúng là cách dễ nhất để hiểu chúng làm gì. Ở trên, /dev/vdb1 được mount với option rw, nghĩa là đọc và ghi được vào file system này, và thực tế đúng như vậy vì tạo file mới trên đó thành công. Dùng option ro thay cho rw thì file system thành read-only. Option được truyền cho lệnh mount qua switch -o:

sudo mount -o ro /dev/vdb1 /mybackups
findmnt -t xfs,ext4

# Output (minh họa):
TARGET SOURCE FSTYPE OPTIONS
/ /dev/vda1 ext4 rw,relatime
/mybackups /dev/vdb1 xfs ro,relatime

Option đã được áp dụng, và thử tạo file lúc này sẽ bị từ chối vì file system đang được mount ở chế độ read-only. Từ đó rút ra kết luận chung: mount option, theo một cách nào đó, nói cho file system biết nó phải hành xử ra sao và tuân theo luật gì trong suốt thời gian được mount.

Nhiều option dùng cùng lúc được, ví dụ ro, noexec và nosuid:

sudo mount -o ro,noexec,nosuid /dev/vdb1 /mybackups

noexec làm cho việc khởi chạy một chương trình lưu trên file system này trở thành không thể. nosuid tắt permission SUID, thứ cho phép chương trình chạy với quyền root mà không cần lệnh sudo, chi tiết về SUID nằm ở Part 2.2: Phân quyền file. Những option như noexec và nosuid đôi khi được dùng để tăng độ an toàn cho các file system lẽ ra không nên chứa chương trình. Chẳng hạn chúng được dùng trên điện thoại Android, ở vùng lưu trữ chỉ nên chứa ảnh, video và dữ liệu tương tự. Cắm chiếc điện thoại đó vào một máy tính đã nhiễm virus, và virus cố nhân bản sang hệ thống, thì nó không gây ra tác động gì. Virus chỉ ghi được các file đã nhiễm, nhưng chúng nằm trên một mount point có noexec và nosuid nên không thực thi hay gây hại được. Chúng chỉ là một mớ file ngồi đó không làm gì.

Các option này phải được phân cách bằng dấu phẩy, không có khoảng trắng nào ở giữa.

Muốn ghi được vào file system thì phải đổi option ro về rw. Gọi lại lệnh mount như cũ sẽ không chạy, vì mount báo rằng thiết bị đã được mount rồi. Cách xử lý là bảo nó mount lại file system với option mới, bằng cách nhét thêm remount vào như một mount option nữa:

sudo mount -o remount,rw /dev/vdb1 /mybackups

Những option dùng tới chỗ này được gọi là filesystem independent, vì chúng dùng được trên gần như mọi file system. Phần lớn chúng được mô tả trong manual của lệnh mount:

man mount

Option riêng của từng file system​

Các option khác thì filesystem specific: một số chỉ chạy trên XFS, số khác chỉ chạy trên ext4. Để xem mount option riêng của một file system, phải tra manual của chính file system đó:

man xfs
man ext4

Cuộn xuống tới phần mount options là thấy chúng được mô tả ở đó, chẳng hạn allocsize và logbsize của XFS. Để dùng option logbsize với giá trị 32 kilobyte, trước tiên unmount /dev/vdb1 vì nó đang được mount, rồi mount lại kèm option:

sudo umount /dev/vdb1
sudo mount -o logbsize=32k /dev/vdb1 /mybackups

Ở đây không nên dùng mount -o remount. Với các option độc lập với file system thì remount không sao, nhưng với các option phụ thuộc file system, chúng có thể không được áp dụng nếu file system đã được mount từ trước.

Tới đây các file system đều được mount thủ công. Nhưng chúng cũng mount tự động lúc boot được, nên câu hỏi tiếp theo là áp dụng mount option ở đó bằng cách nào. Mở /etc/fstab ra, và thay vì để defaults như ở mục trước, viết lại dòng với các option tự chọn:

/dev/vdb1 /mybackups xfs ro,noexec 0 2

Lưu file rồi reboot là thấy mount option được áp dụng tự động lúc boot.


9. Bảng lệnh tra nhanh​

LệnhCông dụng
lsblkLiệt kê block device, cột TYPE phân biệt disk, part và lvm
sudo fdisk -l /dev/sdaXem danh sách partition, sector size và sector bắt đầu
sudo cfdisk /dev/sdbTạo, resize, xóa partition và đổi partition type
swapon --showXem các vùng swap đang hoạt động
sudo mkswap /dev/vdb3Chuẩn bị một partition hoặc file để dùng làm swap
sudo swapon /dev/vdb3 / sudo swapoff /dev/vdb3Bật và tắt một vùng swap
sudo dd if=/dev/zero of=/swap bs=1M count=128Tạo file rỗng lấp đầy số 0, thêm status=progress khi file lớn
sudo mkfs.xfs /dev/sdb1 / sudo mkfs.ext4 /dev/sdb2Tạo file system XFS hoặc ext4 trên partition
sudo mkfs.xfs -f -i size=512 -L FirstFS /dev/sdb1Ép format, đặt inode size và nhãn cùng lúc
sudo xfs_admin -l / -LXem và đổi nhãn của file system XFS đã tạo
sudo tune2fs -l / -LXem và đổi thuộc tính của file system ext4 đã tạo
sudo mount /dev/vdb1 /mnt / sudo umount /mntMount và unmount thủ công
sudo mount -o ro,noexec,nosuid /dev/vdb1 /mybackupsMount kèm nhiều option, phân cách bằng dấu phẩy
sudo mount -o remount,rw /dev/vdb1 /mybackupsMount lại với option mới mà không cần unmount
findmnt -t xfs,ext4Xem mount point và mount option của file system thật
sudo blkid / ls -l /dev/disk/by-uuidTra UUID để ghi vào /etc/fstab
sudo systemctl daemon-reloadÉp systemd đọc lại /etc/fstab sau khi sửa
man fstab / man mount / man xfs / man ext4Tra ý nghĩa field trong fstab và các mount option

Thứ tự bốn lớp ở mục 6 là thứ cần nhớ khi vận hành: partition trước, file system sau, mount point sau nữa, và dòng trong /etc/fstab để giữ kết quả qua mỗi lần reboot. Bỏ qua lớp cuối là cái giá phải trả sau lần boot kế tiếp, khi ứng dụng mở file trong một directory rỗng.


Nguồn tham khảo​

Nguồn gốc: Khóa "Prep Course - Linux Foundation Certified System Administrator (LFCS) Certification" — phần "6. Storage" (liệt kê, tạo, xóa và sửa partition; cấu hình và quản lý swap space; tạo và cấu hình file system; mount file system thủ công và tự động lúc boot; điều chỉnh file system option và mount option), nền tảng KodeKloud. Giảng viên: Jeremy Morgan và Alexandru Andrei.

Fact-check:

  • Nút sắp xếp partition trong cfdisk tên là Sort ("Sort the partitions in ascending start-sector order"), không phải Start như bài giảng gốc gọi. Nguồn: man 8 cfdisk, 2026-10-24.
  • Nhãn của file system XFS dài tối đa 12 ký tự ("XFS filesystem labels can be at most 12 characters long"), nên nhãn backup volume mà bài giảng gốc dùng (13 ký tự) vượt giới hạn. Nguồn: man 8 mkfs.xfs, 2026-10-24.