hoatranlab.io.vn Zalo: 0917516878 Hotline: 0917516878 [email protected]
HoaTranLab Logo HoaTranLab
Linux Bible 11th Edition • Chapter 12

Managing Disks and Filesystems

Phân vùng đĩa, tạo filesystem, mount/umount, quản lý LVM (Logical Volume Manager) và các loại filesystem phổ biến trong Linux.

Mục tiêu học tập

Phân vùng đĩa cứng

Hiểu MBR và GPT partition tables, dùng parted và fdisk để xem, tạo, sửa và xóa phân vùng đĩa.

Tạo Filesystems

Sử dụng mkfs để tạo các loại filesystem: ext4, xfs, vfat, btrfs và mkswap cho swap partition.

Mount và /etc/fstab

Gắn kết filesystem tạm thời bằng mount, vĩnh viễn qua /etc/fstab, hiểu các mount options: defaults, acl, noatime.

Logical Volume Manager (LVM)

Tạo physical volume, volume group, logical volume từ bottom-up. Mở rộng LV mà không cần downtime.

Kiểm tra dung lượng

Dùng df để xem dung lượng filesystem, du để kiểm tra dung lượng thư mục/file, lsblk để liệt kê block devices.

Swap Area

Tạo và quản lý swap space, bật/tắt swap bằng swapon/swapoff, kiểm tra swap usage.

Lý thuyết chi tiết

Phân vùng đĩa: parted và fdisk

Linux dùng hai chuẩn partition table: MBR (giới hạn 4 primary partitions, max 2TB/partition) và GPT (hỗ trợ lên đến 9.4 zettabytes, không giới hạn partitions). Công cụ parted hỗ trợ cả hai, còn fdisk thường dùng cho MBR.

Terminal — parted & fdisk

# Xem tất cả partition tables

$ sudo parted -l

Model: SK hynix BC711 (nvme)

Disk /dev/nvme0n1: 256GB

Partition Table: gpt

Number Start End Size File system Name

1 1049kB 538MB 537MB fat32 EFI System Partition

2 538MB 256GB 256GB ext4

# Xem chi tiết partition với fdisk

$ sudo fdisk -l /dev/sda

Disk /dev/sda: 57.77 GiB

Device Boot Start End Sectors Size Id Type

/dev/sda1 2048 121145343 121143296 57.8G c W95 FAT32 (LBA)

# Tạo phân vùng mới với parted

$ sudo parted /dev/sda

(parted) mklabel gpt

(parted) mkpart primary ext4 1MiB 10GiB

(parted) print

(parted) quit

# Liệt kê block devices

$ lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sda 8:0 0 57.8G 0 disk

├─sda1 8:1 0 57.8G 0 part

nvme0n1 259:0 0 238.5G 0 disk

├─nvme0n1p1 259:1 0 512M 0 part /boot/efi

└─nvme0n1p2 259:2 0 238G 0 part /

Tạo Filesystem và Mount

Sau khi phân vùng, cần format (tạo filesystem) trước khi sử dụng. Lệnh mkfs tạo nhiều loại filesystem. Lệnh mount gắn filesystem vào cây thư mục Linux.

Terminal — mkfs & mount

# Tạo filesystem

$ sudo mkfs -t ext4 /dev/sda1

$ sudo mkfs -t xfs /dev/sda2

$ sudo mkfs -t vfat /dev/sda3

$ sudo mkswap /dev/sda4

# Mount tạm thời

$ sudo mkdir /mnt/data

$ sudo mount /dev/sda1 /mnt/data

$ df -h /dev/sda1

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 57G 24K 54G 1% /mnt/data

# Unmount

$ sudo umount /dev/sda1

$ sudo umount /mnt/data

# Xem tất cả mounts

$ mount | grep sda

$ cat /proc/mounts

# Bật swap

$ sudo swapon /dev/sda4

$ swapon -s

Filename Type Size Used Priority

/dev/sda4 partition 4194300 0 -2

Cấu hình /etc/fstab

File /etc/fstab xác định filesystem nào sẽ được mount tự động khi boot. Mỗi dòng gồm 6 trường: device, mountpoint, fstype, options, dump, pass.

/etc/fstab

# /etc/fstab format:

# device mountpoint fstype options dump pass

/dev/nvme0n1p2 / ext4 defaults 1 1

/dev/nvme0n1p1 /boot/efi vfat umask=0077 0 1

/dev/sda1 /mnt/data ext4 defaults 0 2

/dev/sda4 swap swap defaults 0 0

# Dùng UUID (ổn định hơn device name)

$ sudo blkid /dev/sda1

/dev/sda1: UUID="a1b2c3d4-..." TYPE="ext4"

UUID=a1b2c3d4-1234-5678-abcd-ef0123456789 /mnt/data ext4 defaults 0 2

# Mount với ACL

/dev/sdc1 /var/stuff ext4 acl 1 2

# Test fstab không reboot

$ sudo mount -a

# Remount với options mới

$ sudo mount -o remount /dev/sdc1

Logical Volume Manager (LVM)

LVM tạo lớp trừu tượng trên physical disks: Physical Volume (PV)Volume Group (VG)Logical Volume (LV). Ưu điểm: mở rộng/thu nhỏ volume không cần downtime, dễ quản lý.

Terminal — LVM từ đầu

# Bước 1: Tạo Physical Volume

$ sudo pvcreate /dev/sda6

Physical volume "/dev/sda6" successfully created.

$ sudo pvdisplay /dev/sda6

PV Name /dev/sda6

VG Name (not yet assigned)

PV Size 4.00 GiB

# Bước 2: Tạo Volume Group

$ sudo vgcreate myvg0 /dev/sda6

Volume group "myvg0" successfully created

$ sudo vgdisplay myvg0

VG Name myvg0

VG Size <4.00 GiB

Total PE 1023

Free PE / Size 1023 / <4.00 GiB

# Bước 3: Tạo Logical Volume

$ sudo lvcreate -n music -L 1G myvg0

Logical volume "music" created

$ ls /dev/mapper/myvg0*

/dev/mapper/myvg0-music

# Bước 4: Format và mount LV

$ sudo mkfs -t ext4 /dev/mapper/myvg0-music

$ sudo mkdir /mnt/mymusic

$ sudo mount /dev/mapper/myvg0-music /mnt/mymusic

$ df -h /mnt/mymusic

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/myvg0-music 974M 24K 907M 1% /mnt/mymusic

Terminal — Mở rộng LVM không downtime

# Kiểm tra không gian còn trong VG

$ sudo vgdisplay myvg0 | grep Free

Free PE / Size 767 / <3.00 GiB

# Mở rộng LV thêm 1GB

$ sudo lvextend -L +1G /dev/mapper/myvg0-music

Size of logical volume myvg0/music changed from 1.00 GiB to 2.00 GiB.

# Resize filesystem để dùng hết không gian mới

$ sudo resize2fs -p /dev/mapper/myvg0-music

$ df -h /mnt/mymusic

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/myvg0-music 2.0G 24K 1.9G 1% /mnt/mymusic

# Thêm PV vào VG khi hết không gian

$ sudo pvcreate /dev/sdb1

$ sudo vgextend myvg0 /dev/sdb1

Kiểm tra dung lượng: df và du

Terminal — df & du

# df: dung lượng filesystem

$ df -h

Filesystem Size Used Avail Use% Mounted on

/dev/nvme0n1p2 234G 50G 172G 23% /

tmpfs 7.7G 2.3M 7.7G 1% /run

/dev/nvme0n1p1 511M 6.2M 505M 2% /boot/efi

# df: hiển thị theo filesystem type

$ df -T

Filesystem Type 1K-blocks Used Available Use% Mounted on

/dev/nvme0n1p2 ext4 244506608 52428800 179677808 23% /

# du: dung lượng thư mục

$ du -sh /home/*

4.2G /home/alice

1.1G /home/bob

$ du -sh --max-depth=1 /var

$ du -sh /var/log

856M /var/log

Lab thực hành

Bài lab: Phân vùng USB drive, tạo LVM volume group và logical volume, mount vĩnh viễn.

1

Xác định thiết bị USB

Cắm USB và xác định tên device được assign.

Terminal

$ lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sda 8:0 1 57.8G 0 disk

└─sda1 8:1 1 57.8G 0 part

$ sudo fdisk -l /dev/sda

# Xác nhận đây là USB, không phải ổ hệ thống

2

Tạo phân vùng GPT với parted

Tạo GPT partition table và một phân vùng ext4 chiếm toàn bộ USB.

Terminal

$ sudo umount /dev/sda1 2>/dev/null

$ sudo parted /dev/sda

(parted) mklabel gpt

Warning: Destroy all data? Yes/No? Yes

(parted) mkpart primary ext4 1MiB 100%

(parted) print

Number Start End Size

1 1.05MB 62.0GB 62.0GB ext4

(parted) quit

3

Format và Mount filesystem

Tạo ext4 filesystem và mount vào /mnt/usbdata.

Terminal

$ sudo mkfs -t ext4 /dev/sda1

mke2fs 1.46.5: Creating filesystem with 15143168 4k blocks

Writing inode tables: done

Creating journal (65536 blocks): done

$ sudo mkdir /mnt/usbdata

$ sudo mount /dev/sda1 /mnt/usbdata

$ df -h /dev/sda1

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 57G 24K 54G 1% /mnt/usbdata

4

Tạo LVM trên phân vùng thứ hai

Tạo PV, VG và LV từ /dev/sdb (nếu có ổ thứ hai).

Terminal

$ sudo pvcreate /dev/sdb

Physical volume "/dev/sdb" successfully created.

$ sudo vgcreate datavg /dev/sdb

Volume group "datavg" successfully created

$ sudo lvcreate -n datalv -L 5G datavg

Logical volume "datalv" created.

$ sudo mkfs -t xfs /dev/datavg/datalv

$ sudo mkdir /data && sudo mount /dev/datavg/datalv /data

5

Cấu hình /etc/fstab để mount vĩnh viễn

Dùng UUID để mount tự động khi boot.

Terminal

$ sudo blkid /dev/sda1

/dev/sda1: UUID="abc12345-6789-..." TYPE="ext4"

$ sudo vim /etc/fstab

# Thêm dòng sau:

UUID=abc12345-6789-... /mnt/usbdata ext4 defaults 0 2

# Test fstab trước khi reboot

$ sudo mount -a

$ df -h /mnt/usbdata

6

Mở rộng Logical Volume

Thêm 2GB vào LV đang mount mà không cần unmount.

Terminal

$ sudo lvextend -L +2G /dev/datavg/datalv

Size of logical volume datavg/datalv changed from 5.00 GiB to 7.00 GiB

# Với ext4: dùng resize2fs

$ sudo resize2fs /dev/datavg/datalv

# Với xfs: dùng xfs_growfs (phải mounted)

$ sudo xfs_growfs /data

$ df -h /data

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/datavg-datalv 7.0G 100M 6.7G 2% /data

Câu hỏi ôn tập

1

Sự khác biệt chính giữa MBR và GPT partition table là gì?

MBR: giới hạn 4 primary partitions, max 2TB/partition, dùng cho BIOS. GPT: không giới hạn partitions (thực tế 128), hỗ trợ đến 9.4 zettabytes/partition, dùng cho UEFI. Công cụ parted hỗ trợ cả hai; fdisk truyền thống chỉ hỗ trợ MBR.

2

Lệnh nào tạo filesystem ext4 trên /dev/sdb1?

sudo mkfs -t ext4 /dev/sdb1

Hoặc: sudo mkfs.ext4 /dev/sdb1. Tương tự: mkfs.xfs, mkfs.vfat, mkfs.btrfs.

3

6 trường trong /etc/fstab có ý nghĩa gì?

device mountpoint fstype options dump pass
1. device: UUID hoặc /dev/xxx
2. mountpoint: nơi gắn trong cây thư mục
3. fstype: ext4, xfs, vfat, swap...
4. options: defaults, ro, noexec, acl...
5. dump: 0=không backup, 1=backup
6. pass: 0=không fsck, 1=/ (root), 2=các FS khác

4

Quy trình tạo LVM logical volume từ đầu gồm những bước nào?

1. pvcreate /dev/sdX — tạo Physical Volume
2. vgcreate myvg /dev/sdX — tạo Volume Group
3. lvcreate -n mylv -L 5G myvg — tạo Logical Volume
4. mkfs -t ext4 /dev/myvg/mylv — format
5. mount /dev/myvg/mylv /mountpoint — mount

5

Làm thế nào để mở rộng logical volume mà không cần unmount?

1. lvextend -L +2G /dev/myvg/mylv — mở rộng LV
2a. Cho ext4: resize2fs /dev/myvg/mylv
2b. Cho xfs: xfs_growfs /mountpoint
Lưu ý: xfs không hỗ trợ shrink. LV ext4/xfs có thể mở rộng online, nhưng shrink đòi unmount.

6

Lệnh nào kiểm tra dung lượng còn trống của các filesystem đã mount?

df -h — hiển thị human-readable (GB, MB)
df -T — hiển thị kèm filesystem type
df -h /home — chỉ xem một mount point
du -sh /var/log — dung lượng thư mục cụ thể

7

Tại sao nên dùng UUID trong /etc/fstab thay vì /dev/sdX?

Device names như /dev/sda có thể thay đổi khi thêm/bỏ ổ đĩa hoặc thứ tự khởi động thay đổi. UUID là duy nhất và cố định cho mỗi filesystem, không thay đổi ngay cả khi device name thay đổi. Dùng blkid /dev/sdX để lấy UUID.

8

Filesystem type nào là mặc định của RHEL 9 và filesystem type nào tốt nhất cho file chia sẻ Windows-Linux?

RHEL 9 mặc định dùng xfs cho root filesystem (hiệu suất cao với file lớn). Fedora mới nhất dùng btrfs. Để chia sẻ file giữa Linux và Windows, dùng vfat (FAT32) hoặc exFAT — được cả hai hệ điều hành hiểu. NTFS cũng được Linux hỗ trợ nhưng cần thêm driver.