Chương 4 · Đĩa và hệ thống tệp Chapter 4 · Disks and Filesystems
Một cái đĩa chỉ là các khối — phân vùng và hệ thống tệp là những tầng ta dựng lên trên nó Cái đĩa giống một tờ giấy trắng khổng lồ A disk is only blocks — partitions and filesystems are the layers we build on top
Chương 3 cho bạn cái nhìn tổng quan về những thiết bị đĩa ở tầng trên mà nhân phơi bày ra; chương 4 đi xuống chi tiết: cách phân vùng đĩa, cách tạo và bảo trì các hệ thống tệp nằm bên trong những phân vùng đó, và cách làm việc với không gian tráo đổi.1 Ward nhắc lại rằng một thiết bị đĩa như /dev/sda — đĩa đầu tiên của phân hệ SCSI — là một block device đại diện cho toàn bộ cái đĩa; nhưng bên trong cái đĩa ấy có rất nhiều thành phần và tầng lớp.1
Cái đĩa trong máy tính giống một tờ giấy trắng rất to. Tờ giấy đó không tự biết chỗ nào để ảnh, chỗ nào để bài hát. Người ta phải kẻ ô trước (gọi là phân vùng), rồi mới vẽ bảng mục lục vào từng ô (gọi là hệ thống tệp). Có mục lục rồi thì máy mới tìm được tệp của bạn. Nhớ nhé: kẻ ô trước, làm mục lục sau, rồi mới cất đồ vào.
Chapter 3 gave an overview of the top-level disk devices the kernel makes available; Chapter 4 goes into detail: how to partition disks, how to create and maintain the filesystems that go inside disk partitions, and how to work with swap space.1 Ward reminds us that a disk device such as /dev/sda — the first SCSI subsystem disk — is a block device representing the entire disk; but inside that disk there are many different components and layers.1
Hình 4-1 của sách vẽ một lược đồ đĩa Linux điển hình theo chiều từ ngoài vào: bảng phân vùng nằm trên cùng; bên dưới là các phân vùng; trong một phân vùng là hệ thống tệp cùng các cấu trúc dữ liệu của nó; và trong cùng là dữ liệu tệp.1 Ward rút ra hệ quả thực hành ngay từ lược đồ: muốn truy cập dữ liệu của một tệp, bạn phải lấy đúng vị trí phân vùng từ bảng phân vùng, rồi tra cơ sở dữ liệu hệ thống tệp trên phân vùng đó để tìm dữ liệu tệp mong muốn.1 Còn hình 4-2 nhìn từ phía nhân: tiến trình người dùng gọi xuống qua lời gọi hệ thống tới hệ thống tệp, hệ thống tệp gọi xuống giao diện thiết bị khối và ánh xạ phân vùng, rồi tới phân hệ SCSI và các trình điều khiển khác; song song với nhánh đó là truy cập thiết bị thô (trực tiếp) qua các tệp thiết bị.1
Luận đề của chương: giữa “cái đĩa vật lý” và “thư mục bạn gõ ls vào” có đúng ba tầng trung gian — bảng phân vùng, hệ thống tệp, và điểm gắn kết; mỗi tầng do một công cụ riêng cai quản, và gần như mọi rắc rối về lưu trữ đều là chuyện bạn nhầm tầng.1
Ý chính: từ cái đĩa đến thư mục của bạn có ba chặng: chia ô, làm mục lục, và treo mục lục đó vào cây thư mục. Nhớ nhé: ba chặng — chia ô, mục lục, treo vào cây.
The chapter's thesis: between "the physical disk" and "the directory you type ls into" there are exactly three intermediate layers — the partition table, the filesystem, and the mount point; each is governed by its own tool, and nearly every storage problem is a matter of confusing one layer for another.1
/dev/sda — chỉ là một dãy khối
Tờ giấy trắng khổng lồ
The whole disk: /dev/sda — just a run of blocks
/dev/sda1, /dev/sdb3 — nhân trình bày nó cũng như một thiết bị khối
Một ô trên tờ giấy
A subdivision of the whole disk: /dev/sda1, /dev/sdb3 — presented as a block device too
Cụm khái niệm 01 Concept cluster 01
Phân vùng đĩa: bảng phân vùng, MBR, GPT và hình học đã thành hư cấu Chia cái đĩa thành từng ô Partitioning disk devices: the table, MBR, GPT, and a geometry that became fiction
Ward mở đầu phần này bằng một câu gỡ bỏ toàn bộ vẻ huyền bí: “không có gì đặc biệt ở một bảng phân vùng — nó chỉ là một mớ dữ liệu nói rằng các khối trên đĩa được chia ra thế nào”.1 Bảng truyền thống, có từ thời máy PC, nằm bên trong Master Boot Record (MBR) và mang nhiều giới hạn; hầu hết hệ thống mới hơn dùng Globally Unique Identifier Partition Table (GPT).1
Trước khi cất đồ vào một cái tủ rất to, người ta đóng vách ngăn chia tủ thành từng ngăn. Bảng phân vùng chính là tờ giấy ghi “ngăn một từ đây đến đây, ngăn hai từ đây đến đây”. Nó không chứa đồ, nó chỉ ghi ranh giới thôi. Nhớ nhé: bảng phân vùng chỉ ghi ranh giới, không chứa đồ.
Ward opens this part with a line that removes all the mystique: "there's nothing special about a partition table—it's just a bunch of data that says how the blocks on the disk are divided."1 The traditional table, dating back to the PC days, lives inside the Master Boot Record (MBR) and carries many limitations; most newer systems use the Globally Unique Identifier Partition Table (GPT).1
Ông cũng cắm một cái mốc khái niệm ngay tại đây, và nó chi phối cả chương: có một khác biệt then chốt giữa phân vùng và thao tác hệ thống tệp — bảng phân vùng định nghĩa những ranh giới đơn giản trên đĩa, còn hệ thống tệp là một hệ dữ liệu phức tạp hơn nhiều. Chính vì thế người ta dùng những công cụ tách bạch cho hai việc.1 Nếu bạn chỉ nhớ một điều từ chương này, hãy nhớ điều đó: công cụ phân vùng (fdisk, parted) không bao giờ tạo ra hệ thống tệp, và công cụ tạo hệ thống tệp (mkfs) không bao giờ vẽ lại ranh giới.
Định nghĩa. Phân vùng là phần chia nhỏ của cả đĩa. Trên Linux chúng được ký hiệu bằng một con số đặt sau tên thiết bị khối của cả đĩa — /dev/sda1, /dev/sdb3. Nhân trình bày mỗi phân vùng như một thiết bị khối, y như cách nó trình bày cả đĩa. Các phân vùng được định nghĩa trên một vùng nhỏ của đĩa gọi là bảng phân vùng (còn gọi là disk label).1
Nói đơn giản. Phân vùng là một ngăn trong tủ. Ngăn có tên riêng: tủ là sda thì ngăn một là sda1. Nhớ nhé: thêm số vào sau tên đĩa là ra tên ngăn.
Definition. A partition is a subdivision of the whole disk. On Linux they are denoted with a number after the whole block device — /dev/sda1, /dev/sdb3. The kernel presents each partition as a block device, just as it would an entire disk. Partitions are defined on a small area of the disk called the partition table (also called a disk label).1
parted -l → xem bảng
fdisk /dev/sdd → sửa bảng
p = in · d = xoá
n = tạo · w = ghi
q = thoát, KHÔNG ghi
xem → parted -l
sửa → fdisk /dev/sdX
p in · n tạo
w ghi · q bỏ
parted -l → view table
fdisk /dev/sdd → edit table
p = print · d = delete
n = new · w = write
q = quit, WITHOUT writing
-
partition table
Bảng phân vùng — vài trăm byte quyết định cả cái đĩa Bảng phân vùng — tờ giấy kẻ ô The partition table — a few hundred bytes that decide the whole disk
Bạn xem bảng phân vùng của hệ thống bằng
parted -l.12 Trong ví dụ của sách, lệnh đó in ra hai thiết bị mang hai loại bảng khác nhau:/dev/sdadùng bảng MBR truyền thống (partedgọi nó làmsdos), còn/dev/sdfchứa một GPT.1 Hai kiểu bảng lưu những tập tham số khác nhau — đáng chú ý nhất là bảng MBR không có cộtName, bởi vì lược đồ đó không có khái niệm tên.1Muốn biết cái đĩa đang được chia thế nào, gõ
parted -l. Nó in ra một bảng: ngăn này bắt đầu ở đâu, kết thúc ở đâu, to bao nhiêu. Xem thì an toàn, không làm hỏng gì cả. Nhớ nhé: xem thì cứ xem thoải mái, chỉ khi sửa mới phải cẩn thận.You view your system's partition table with
parted -l.12 In the book's sample output that command shows two devices with two different kinds of table:/dev/sdauses the traditional MBR table (whichpartedcallsmsdos), while/dev/sdfcontains a GPT.1 The two table types store different sets of parameters — most visibly, the MBR table has noNamecolumn, because names don't exist under that scheme.1Bạn gặp nó ở đâuWhere you meet it Mỗi khi cắm một ổ USB lạ vào máy và tự hỏi “trong này có gì” —parted -lhoặclsblklà câu trả lời an toàn đầu tiên. Khi bạn cắm USB vào và muốn biết bên trong chia mấy ngăn. Every time you plug in an unfamiliar drive and wonder what's on it —parted -lorlsblkis the safe first answer.Cảnh báo về đơn vị
Ward đặt một ghi chú riêng cho chuyện này: hãy coi chừng đơn vị khi đọc bảng phân vùng.
partedhiển thị kích thước xấp xỉ, dựa trên cái mà nó cho là dễ đọc nhất. Ngược lại,fdisk -lhiển thị con số chính xác, nhưng trong hầu hết trường hợp đơn vị là “sector” 512 byte — dễ gây hiểu lầm vì trông như bạn vừa nhân đôi kích thước đĩa.14Kiểu hệ thống tệp ≠ system ID
Kiểu hệ thống tệp mà
partedliệt kê không nhất thiết trùng với trường system ID trong các mục MBR. System ID của MBR chỉ là một con số nhận dạng loại phân vùng — ví dụ83là phân vùng Linux và82là phân vùng swap Linux — cònpartedthì cố tỏ ra hữu ích hơn bằng cách tự xác định loại hệ thống tệp thực sự nằm trên phân vùng đó. Nếu bạn nhất định cần biết system ID của một MBR, hãy dùngfdisk -l.1 -
MBR
MBR — primary, extended, logical và cái trần bốn ngăn MBR — kiểu bảng cũ, chỉ kẻ được bốn ô MBR — primary, extended, logical, and the ceiling of four
Một primary partition là phần chia nhỏ bình thường của đĩa. MBR cơ bản có giới hạn bốn phân vùng primary; vậy nên nếu muốn nhiều hơn bốn, bạn phải chỉ định một trong số đó làm extended partition. Phân vùng extended lại chia nhỏ thành các logical partition, và hệ điều hành dùng chúng như mọi phân vùng khác.15 Trong ví dụ của sách, phân vùng 2 là extended và nó chứa phân vùng logical số 5.1
Kiểu bảng cũ chỉ kẻ được bốn ô lớn. Muốn nhiều ô hơn, người ta lấy một ô lớn làm “ô chứa ô con”, rồi kẻ tiếp bên trong nó. Nhớ nhé: MBR cho bốn ô lớn; muốn thêm thì phải có ô chứa ô con.
A primary partition is a normal subdivision of the disk. The basic MBR has a limit of four primary partitions, so if you want more than four you must designate one as an extended partition. An extended partition breaks down into logical partitions, which the operating system can then use as it would any other partition.15 In the book's example, partition 2 is an extended partition containing logical partition 5.1
Bạn gặp nó ở đâuWhere you meet it Khi đọc nhật ký nhân lúc khởi động và thấy dòngsda: sda1 sda2 < sda5 >— dấu ngoặc nhọn chính là phân vùng extended đang ôm lấy phân vùng logical bên trong. Khi máy in ra dòng lạ có dấu ngoặc nhọn quanh một tên đĩa. When you read the boot-time kernel log and seesda: sda1 sda2 < sda5 >— the angle brackets are an extended partition holding a logical partition inside.Đọc nhật ký nhân
Khi đọc bảng MBR lần đầu, nhân Linux sinh ra dòng gỡ lỗi mà bạn xem được bằng
journalctl -k. Phầnsda2 < sda5 >cho biết/dev/sda2là một phân vùng extended chứa một phân vùng logical là/dev/sda5. Thông thường bạn bỏ qua chính phân vùng extended, vì cái bạn quan tâm là các phân vùng logical nằm trong nó.1Dấu hiệu LVM
Khi xem bảng phân vùng, nếu bạn thấy các phân vùng gắn nhãn LVM (mã loại
8e), các thiết bị tên/dev/dm-*, hoặc những tham chiếu tới “device mapper”, thì hệ thống của bạn đang dùng LVM — và những gì bạn thấy sẽ hơi khác so với phân vùng đĩa trực tiếp truyền thống.1 Trên hệ như vậy,parted -lin ra những thứ trông như phân vùng nhưng lại được gọi là disk, chẳng hạn/dev/mapper/ubuntu--vg-rootvới bảng kiểuloop.1 -
GPT
GPT — bảng có tên, và một công cụ duy nhất cho cả hai GPT — kiểu bảng mới, ô có tên riêng GPT — a table with names, and one tool for both
GPT là kiểu bảng mà hầu hết hệ thống mới hơn dùng.16 Khác biệt dễ thấy nhất trong đầu ra
parted -llà cộtName: trong ví dụ của sách, hai phân vùng GPT trên/dev/sdfmang tênmyfirstvàmysecond— những cái tên mà chính tác giả nói là ông đặt tuỳ ý.1 Cảpartedlẫnfdiskphiên bản gần đây đều hỗ trợ cả MBR lẫn GPT; chỉ những bảnfdiskcũ mới bị giới hạn ở MBR.14Kiểu bảng mới cho phép đặt tên cho từng ô, và không bị trần bốn ô như kiểu cũ. Máy tính đời mới gần như đều dùng kiểu này. Nhớ nhé: bảng mới thì ô có tên, bảng cũ thì ô chỉ có số.
GPT is the table type most newer systems use.16 The most visible difference in
parted -loutput is theNamecolumn: in the book's example the two GPT partitions on/dev/sdfare namedmyfirstandmysecond— names the author says he chose arbitrarily.1 Bothpartedand recent versions offdisksupport MBR and GPT; only olderfdiskversions were limited to MBR.14Bạn gặp nó ở đâuWhere you meet it Bất cứ máy tính nào khởi động bằng UEFI: phân vùng hệ thống EFI của nó nằm trong một GPT. Máy tính đời mới của bạn gần như chắc chắn đang dùng GPT. Any machine that boots via UEFI: its EFI system partition lives in a GPT.Bộ công cụ mà sách chọn
Ward giải thích rõ vì sao ông trộn hai công cụ: vì
partedđã hỗ trợ cả MBR lẫn GPT từ lâu và chạy một lệnh đơn để lấy nhãn phân vùng rất dễ, nên ông dùngpartedđể hiển thị bảng phân vùng; nhưng khi tạo và thay đổi bảng thì ông dùngfdisk. Cách đó minh hoạ cả hai giao diện, và cho thấy vì sao nhiều người thíchfdisk— nó tương tác, và nó không thay đổi gì trên đĩa cho tới khi bạn đã có cơ hội xem lại.13 -
fdisk vs parted
Sửa bảng — khác biệt sống còn giữa “soạn rồi ghi” và “làm ngay” Sửa bảng — một bên cho xem lại, một bên làm luôn Modifying the table — the crucial gap between "draft then write" and "do it now"
Đây là điểm mà Ward nhấn mạnh nhất: với
fdisk, bạn thiết kế bảng phân vùng mới trước, và nó chỉ thực hiện thay đổi khi bạn thoát chương trình; còn vớiparted, phân vùng được tạo, sửa và xoá ngay khi bạn ra lệnh — bạn không có cơ hội xem lại bảng trước khi thay đổi nó.13 Trongfdisk, nếu bạn phạm một sai lầm không cứu được, lệnhqcho phép thoát mà không ghi thay đổi.1Có hai kiểu sửa. Kiểu thứ nhất giống viết nháp: bạn kẻ lại trên giấy nháp, xem kỹ, rồi mới chép vào bản thật. Kiểu thứ hai làm thẳng vào bản thật, không có nháp. Người mới nên dùng kiểu có nháp. Nhớ nhé: có nháp thì còn đường lui.
This is what Ward stresses most: with
fdiskyou design the new partition table first, and it makes the changes only when you exit the program; withparted, partitions are created, modified and removed as you issue the commands — you don't get the chance to review the table before you change it.13 Infdisk, if you make a mistake you can't recover from, theqcommand quits without writing the changes.1Bạn gặp nó ở đâuWhere you meet it Lần đầu bạn định dạng lại một ổ cứng cũ — và lần đầu bạn nhận rawvàqchỉ cách nhau một phím. Khi bạn định xoá sạch một ổ cũ để dùng lại. The first time you repartition an old drive — and the first time you notice thatwandqare one keystroke apart.Hai rủi ro mà sách bắt bạn ghi nhớ
Ward nói thẳng: xem bảng phân vùng là thao tác tương đối đơn giản và vô hại, nhưng thay đổi nó thì có rủi ro. Hai điều phải nhớ: (1) thay đổi bảng phân vùng khiến việc khôi phục dữ liệu trên những phân vùng bạn xoá hoặc định nghĩa lại trở nên rất khó, vì làm vậy có thể xoá mất vị trí của các hệ thống tệp trên đó — hãy chắc chắn bạn có bản sao lưu nếu đĩa chứa dữ liệu quan trọng; (2) hãy bảo đảm không phân vùng nào trên đĩa đích đang được dùng, vì hầu hết bản phân phối Linux tự động gắn mọi hệ thống tệp mà nó phát hiện.1
Ai nói cho nhân biết
Cả
fdisklẫnpartedđều sửa phân vùng hoàn toàn trong không gian người dùng; không cần nhân hỗ trợ việc ghi lại bảng phân vùng, vì không gian người dùng đọc và sửa được toàn bộ một thiết bị khối.1 Nhưng đến một lúc nào đó nhân phải đọc bảng để trình bày các phân vùng ra thành thiết bị khối.fdisklàm việc đó bằng một lời gọi hệ thống duy nhất bảo nhân đọc lại bảng phân vùng của đĩa;partedthì không dùng lời gọi toàn-đĩa đó mà báo cho nhân biết khi từng phân vùng riêng lẻ bị thay đổi, nên nó không sinh ra dòng gỡ lỗi kể trên.1Ví dụ thực tế của sách
Ward dựng một kịch bản cụ thể để bạn theo: một đĩa 4GB (ổ flash USB nhỏ, chưa dùng), bảng phân vùng kiểu MBR, hai phân vùng dự định đặt hệ thống tệp ext4 — 200MB và 3,8GB — trên thiết bị
/dev/sdd; ông nhắc bạn phải tự tìm vị trí thiết bị của mình bằnglsblk.17 Trình tự tương tác:pđể in bảng hiện tại (hầu hết thiết bị đã có sẵn một phân vùng kiểu FAT),dđể xoá,nđể tạo —fdiskhỏi kiểu phân vùng MBR, số hiệu, sector đầu và sector cuối (hoặc kích thước); các giá trị mặc định rất thường là cái bạn muốn, và trong ví dụ thứ duy nhất bị đổi là kích thước cuối, viết theo cú pháp+200M.14Cuối cùng là
wđể ghi bảng. Ward ghi chú một điều đáng ghim:fdiskkhông hỏi bạn “có chắc không” như một biện pháp an toàn — nó chỉ đơn giản làm việc của mình rồi thoát.1Ba cách nhìn thấy thay đổi
Sách đưa ba cách: dùng
udevadm monitor --kernelđể xem sự kiện nhân gỡ thiết bị phân vùng cũ và thêm thiết bị mới; xem/proc/partitionsđể lấy thông tin phân vùng đầy đủ; hoặc xem/sys/block/device/và/dev.124 Và nếu bạn nhất định phải xác nhận thay đổi,blockdev --rereadpt /dev/sdfthực hiện đúng lời gọi hệ thống kiểu cũ màfdiskphát ra.18 -
CHS / LBA
Hình học đĩa — cylinder, head, sector, và những con số là hư cấu Hình dạng bên trong đĩa quay Disk geometry — cylinder, head, sector, and numbers that are fiction
Một đĩa cứng gồm đĩa tròn (platter) quay trên trục (spindle), với đầu đọc (head) gắn vào một cánh tay quét theo bán kính. Khi cánh tay đứng yên ở một vị trí, đầu đọc chỉ đọc được dữ liệu trên một vòng tròn cố định — vòng tròn đó gọi là cylinder, vì đĩa lớn có nhiều platter xếp chồng quay quanh cùng một trục. Chia nhỏ một cylinder ra thì được các lát gọi là sector. Cách nghĩ này gọi là CHS — cylinder-head-sector.1 Nhưng Ward nói thẳng: trên bất kỳ đĩa cứng nào tương đối gần đây, những giá trị được báo cáo đều là hư cấu.1
Đĩa cứng kiểu cũ giống cái đĩa than: một tấm tròn quay, một cái kim đọc. Ngày xưa người ta tìm dữ liệu bằng cách nói “vòng thứ mấy, kim nào, lát nào”. Bây giờ cách đó không còn đúng nữa — máy chỉ đánh số các khối từ đầu đến cuối. Nhớ nhé: bây giờ đĩa chỉ là một dãy khối được đánh số.
A hard disk consists of a spinning platter on a spindle, with a head on a moving arm that sweeps across the radius. When the arm is in one position the head can read only from a fixed circle — that circle is called a cylinder, because larger disks have several platters stacked around the same spindle. Divide a cylinder into slices and you get sectors. This way of thinking is called CHS, for cylinder-head-sector.1 But Ward is blunt: on any halfway recent hard disk, the reported values are fiction.1
Bạn gặp nó ở đâuWhere you meet it Khi một công cụ phân vùng đời cũ cằn nhằn rằng phân vùng của bạn không nằm đúng biên cylinder — Ward bảo cứ bỏ qua. Khi một chương trình cũ kêu ca về “biên cylinder”. When an older partitioning program complains that your partitions aren't on cylinder boundaries — Ward says ignore it.Vì sao CHS sụp đổ
Lược đồ địa chỉ truyền thống dùng CHS không mở rộng được theo phần cứng đĩa hiện đại, và nó cũng không tính đến chuyện bạn nhét được nhiều dữ liệu hơn vào các cylinder vòng ngoài so với vòng trong. Phần cứng đĩa hỗ trợ Logical Block Addressing (LBA) — định vị một chỗ trên đĩa bằng số hiệu khối, một giao diện thẳng thắn hơn nhiều. Nhưng tàn dư của CHS vẫn còn: bảng phân vùng MBR chứa cả thông tin CHS lẫn tương đương LBA, và một số boot loader vẫn đủ ngây thơ để tin vào các giá trị CHS — may là hầu hết boot loader Linux dùng giá trị LBA.15
Biên cylinder có còn quan trọng?
Sách dành riêng một khung cho câu hỏi này. Ý tưởng cylinder từng cực kỳ quan trọng với việc phân vùng, vì cylinder là biên lý tưởng: đọc một luồng dữ liệu từ một cylinder rất nhanh do đầu đọc thu dữ liệu liên tục khi đĩa quay. Nhưng “khái niệm căn chỉnh phân vùng chính xác đã trở nên lỗi thời”. Lược đồ LBA của đĩa, cùng với logic tốt hơn trong các tiện ích phân vùng mới, bảo đảm phân vùng của bạn được bố trí hợp lý.1
-
SSD alignment
Ổ thể rắn — không có đầu đọc, nhưng có biên trang Ổ SSD — không quay, nhưng vẫn kén chỗ bắt đầu Solid-state disks — no head, but page boundaries still matter
Với SSD, truy cập ngẫu nhiên không còn là vấn đề vì không có đầu đọc nào phải quét qua platter. Nhưng một trong những yếu tố quan trọng nhất ảnh hưởng tới hiệu năng SSD là căn chỉnh phân vùng. Khi đọc dữ liệu từ SSD, bạn đọc theo từng khối gọi là page — chẳng hạn 4.096 hoặc 8.192 byte mỗi lần — và phép đọc phải bắt đầu ở một bội số của kích thước đó. Nếu phân vùng và dữ liệu của bạn không nằm trên biên, bạn có thể phải đọc hai lần thay vì một cho những thao tác nhỏ và phổ biến, như đọc nội dung một thư mục.1
Ổ SSD không có kim đọc nên tìm chỗ nào cũng nhanh như nhau. Nhưng nó đọc theo từng ô vuông cố định. Nếu ngăn của bạn bắt đầu lệch so với ô vuông đó, mỗi lần đọc máy phải lấy hai ô thay vì một — chậm gấp đôi một cách vô ích. May là các chương trình chia ngăn đời mới tự căn cho khớp rồi. Nhớ nhé: đặt đúng vạch thì đọc một lần là xong.
On an SSD random access isn't a problem, because there's no head to sweep across a platter. But one of the most significant factors affecting SSD performance is partition alignment. You read SSD data in chunks called pages — 4,096 or 8,192 bytes at a time, say — and the read must begin at a multiple of that size. If your partition and its data do not lie on a boundary, you may have to do two reads instead of one for small, common operations such as reading the contents of a directory.1
Bạn gặp nó ở đâuWhere you meet it Khi một phân vùng cũ do công cụ đời cũ tạo ra chạy chậm bất thường trên SSD mới — thường vì nó bắt đầu ở một offset lẻ. Khi một ổ SSD chạy chậm hơn hẳn so với ổ y hệt bên cạnh. When an old partition made by an old tool is oddly slow on a new SSD — often because it starts at an awkward offset.Con số 2.048
Các tiện ích phân vùng hiện nay không tính toán gì cả; chúng chỉ căn phân vùng trên biên 1MB — chính xác hơn là 2.048 khối 512 byte. Đây là cách tiếp cận khá bảo thủ, vì biên đó khớp với các kích thước page 4.096, 8.192, và cứ thế lên tới 1.048.576.1 Đó cũng là lý do trong ví dụ
fdiskcủa sách, sector đầu tiên mặc định là2048.1Tự kiểm tra bằng một phép chia
Bạn tìm offset của phân vùng trong thư mục
/sys/block. Với/dev/sdf2:cat /sys/block/sdf/sdf2/start— trong ví dụ của sách, kết quả là1953126. Đầu ra là offset của phân vùng tính từ đầu thiết bị, đơn vị 512 byte. Nếu SSD dùng page 4.096 byte thì một page chứa tám “sector” như vậy; việc bạn cần làm chỉ là xem offset có chia hết cho 8 không. Trong trường hợp này thì không, nên phân vùng sẽ không đạt hiệu năng tối ưu.1
Cụm khái niệm 02 Concept cluster 02
Hệ thống tệp: một cơ sở dữ liệu, một động tác gắn, và một cái tên không đổi Mục lục, cách treo mục lục, và cái tên riêng của nó Filesystems: a database, an act of mounting, and a name that never changes
Hệ thống tệp thường là mắt xích cuối cùng giữa nhân và không gian người dùng đối với đĩa — đó chính là thứ bạn tương tác khi chạy ls hay cd. Ward định nghĩa nó gọn gàng: hệ thống tệp là một dạng cơ sở dữ liệu; nó cung cấp cấu trúc để biến một thiết bị khối đơn giản thành cái cây phân cấp tinh vi gồm tệp và thư mục mà con người hiểu được.1
Hệ thống tệp là quyển mục lục của cái ngăn tủ. Nó ghi: bức ảnh này nằm ở chỗ nào, bài hát kia nằm ở chỗ nào, thư mục này chứa những gì. Không có mục lục, máy nhìn vào ngăn tủ chỉ thấy một mớ số. Nhớ nhé: hệ thống tệp là quyển mục lục, không phải cái ngăn.
The filesystem is typically the last link between the kernel and user space for disks — it is what you interact with when you run ls or cd. Ward's definition is neat: a filesystem is a form of database; it supplies the structure to transform a simple block device into the sophisticated hierarchy of files and subdirectories that users can understand.1
Ông kể tiếp một đoạn lịch sử ngắn nhưng quan trọng. Xưa kia mọi hệ thống tệp đều nằm trên đĩa và các phương tiện vật lý dành riêng cho việc lưu trữ. Nhưng cấu trúc thư mục dạng cây và giao diện vào/ra của hệ thống tệp linh hoạt đến mức ngày nay hệ thống tệp làm đủ thứ việc — chẳng hạn các giao diện hệ thống bạn thấy ở /sys và /proc. Hệ thống tệp theo truyền thống được hiện thực trong nhân, nhưng sáng kiến 9P từ Plan 9 đã truyền cảm hứng cho việc phát triển hệ thống tệp trong không gian người dùng; tính năng FUSE (File System in User Space) cho phép điều đó trên Linux.19 Hoàn tất bức tranh là tầng trừu tượng VFS (Virtual File System): giống như phân hệ SCSI chuẩn hoá giao tiếp giữa các loại thiết bị khác nhau, VFS bảo đảm mọi hiện thực hệ thống tệp đều hỗ trợ một giao diện chuẩn, để ứng dụng không gian người dùng truy cập tệp và thư mục theo cùng một cách. Chính VFS đã cho phép Linux hỗ trợ một số lượng hệ thống tệp lớn đến phi thường.110
Định nghĩa. Gắn kết (mounting) là quá trình gắn một hệ thống tệp vào một hệ thống đang chạy. Khi máy khởi động, nhân đọc một ít dữ liệu cấu hình và gắn gốc / dựa trên dữ liệu đó. Muốn gắn một hệ thống tệp, bạn phải biết ba thứ: thiết bị / vị trí / định danh của nó; kiểu hệ thống tệp; và điểm gắn kết — nơi trong cây thư mục hiện tại mà hệ thống tệp sẽ được gắn vào. Điểm gắn kết luôn là một thư mục bình thường, và không nhất thiết phải nằm ngay dưới /.1
Nói đơn giản. Gắn kết là treo quyển mục lục vào một cái móc trong nhà. Cái móc đó là một thư mục bình thường. Treo xong thì đi vào thư mục đó là thấy đồ. Nhớ nhé: gắn kết = treo mục lục vào một thư mục.
Definition. Mounting is the process of attaching a filesystem to a running system. When the system boots, the kernel reads some configuration data and mounts root (/) based on it. To mount a filesystem you must know three things: its device, location or identifier; the filesystem type; and the mount point — the place in the current directory hierarchy where the filesystem will be attached. The mount point is always a normal directory, and need not be directly below /.1
# mkfs -t ext4 /dev/sdf2
# mount -t ext4 /dev/sdf2 /home/extra
$ mount → xem đang gắn gì
# umount /home/extra
# mount UUID=b600… /home/extra
tạo mục lục → mkfs -t ext4
treo lên → mount
xem → mount
gỡ xuống → umount
# mkfs -t ext4 /dev/sdf2
# mount -t ext4 /dev/sdf2 /home/extra
$ mount → see what's mounted
# umount /home/extra
# mount UUID=b600… /home/extra
-
filesystem types
Các kiểu hệ thống tệp — ext4, Btrfs, FAT, XFS, ISO 9660 Có nhiều kiểu mục lục khác nhau Filesystem types — ext4, Btrfs, FAT, XFS, ISO 9660
Linux hỗ trợ cả thiết kế bản địa tối ưu cho Linux, các kiểu ngoại lai như họ FAT của Windows, lẫn các hệ thống tệp phổ quát như ISO 9660.1 ext4 (Fourth Extended filesystem) là bản lặp hiện thời của một dòng hệ thống tệp bản địa Linux; ext2 từng là mặc định lâu năm, lấy cảm hứng từ các hệ thống tệp Unix truyền thống như UFS và FFS; ext3 thêm tính năng journal — một vùng đệm nhỏ nằm ngoài cấu trúc dữ liệu bình thường — để tăng toàn vẹn dữ liệu và rút ngắn thời gian khởi động; còn ext4 là một cải tiến tăng dần, hỗ trợ tệp lớn hơn ext2/ext3 và nhiều thư mục con hơn.111
Mục lục cũng có nhiều kiểu: kiểu của Linux (tên là ext4), kiểu của Windows (tên là FAT), kiểu của đĩa CD... Kiểu nào cũng ghi “cái gì ở đâu”, chỉ khác cách ghi. Nhớ nhé: nhiều kiểu mục lục, nhưng việc thì giống nhau.
Linux supports native designs optimised for Linux, foreign types such as the Windows FAT family, and universal filesystems like ISO 9660.1 ext4 (the Fourth Extended filesystem) is the current iteration of a line of filesystems native to Linux; ext2 was a longtime default, inspired by traditional Unix filesystems such as UFS and FFS; ext3 added a journal — a small cache outside the normal filesystem data structure — to enhance data integrity and hasten booting; and ext4 is an incremental improvement supporting larger files than ext2 or ext3 as well as a greater number of subdirectories.111
Bạn gặp nó ở đâuWhere you meet it CộtTYPEtrong đầu rablkid, hoặc cột thứ ba trong/etc/fstab— đó là nơi kiểu hệ thống tệp lộ diện. Khi máy hỏi bạn muốn định dạng USB theo kiểu nào. TheTYPEcolumn inblkidoutput, or the third column of/etc/fstab— that's where the type shows itself.Tương thích ngược, nhưng chỉ một chiều
Ward nêu một quy tắc rất cụ thể và dễ nhớ sai: bạn có thể gắn hệ thống tệp ext2 và ext3 như nhau, và có thể gắn ext2 lẫn ext3 dưới dạng ext4 — nhưng bạn không thể gắn ext4 dưới dạng ext2 hay ext3.1 Tương thích ngược ở đây chỉ chạy theo một chiều.
Những kiểu còn lại trong danh sách
Btrfs (B-tree filesystem) là hệ thống tệp bản địa Linux mới hơn, thiết kế để vượt qua khả năng của ext4.112 FAT gồm
msdos,vfat,exfat: hầu hết phương tiện flash tháo lắp như thẻ SD và ổ USB mặc định chứa phân vùngvfat(tới 4GB) hoặcexfat(từ 4GB trở lên).113 XFS là hệ thống tệp hiệu năng cao được vài bản phân phối dùng mặc định, chẳng hạn Red Hat Enterprise Linux từ 7.0 trở đi.1 HFS+ (hfsplus) là chuẩn của Apple trên hầu hết máy Macintosh, và ISO 9660 (iso9660) là chuẩn CD-ROM.1Một dự đoán có mốc thời gian
Trong khung “Linux Filesystem Evolution”, Ward viết rằng tại thời điểm ông viết, Btrfs là mặc định của một bản phân phối Linux lớn; nếu điều đó thành công, nhiều khả năng Btrfs sẽ ở vị thế thay thế dòng Extended.1 Đây là một dự đoán gắn với thời điểm 2021, không phải một tuyên bố về hiện tại — khi bạn đọc trang này, hãy tự kiểm tra xem bản phân phối của mình đang mặc định dùng gì.
-
mkfs
Tạo hệ thống tệp — một lệnh, một superblock, và một cảnh báo Làm mục lục mới cho một ngăn trống Creating a filesystem — one command, one superblock, one warning
Tiện ích
mkfstạo được nhiều kiểu hệ thống tệp; ví dụ, tạo một hệ thống tệp ext4 trên/dev/sdf2:mkfs -t ext4 /dev/sdf2.114 Chương trình tự xác định số khối trong thiết bị và đặt vài giá trị mặc định hợp lý — và Ward khuyên thẳng: trừ khi bạn thật sự biết mình đang làm gì và thích đọc tài liệu chi tiết, đừng đổi chúng.1 Cũng như phân vùng, việc này diễn ra trong không gian người dùng, vì một tiến trình người dùng truy cập và thao tác trực tiếp được với thiết bị khối.1Làm mục lục mới chỉ mất một lệnh. Nhưng làm mục lục mới cũng có nghĩa là vứt bỏ mục lục cũ — và khi mục lục cũ mất, đồ đạc trong ngăn coi như mất luôn. Nhớ nhé: chỉ làm mục lục mới cho ngăn mà bạn chắc chắn là trống.
The
mkfsutility can create many kinds of filesystem; to create an ext4 filesystem on/dev/sdf2:mkfs -t ext4 /dev/sdf2.114 The program automatically determines the number of blocks in a device and sets some reasonable defaults — and Ward's advice is blunt: unless you really know what you're doing and feel like reading the documentation in detail, don't change them.1 As with partitioning, this happens in user space, because a user-space process can directly access and manipulate a block device.1Cảnh báo của tác giảThe author's warning Sách để nguyên chữ WARNING: chỉ tạo hệ thống tệp sau khi thêm đĩa mới hoặc phân vùng lại đĩa cũ, và chỉ một lần cho mỗi phân vùng mới chưa có dữ liệu. Tạo một hệ thống tệp mới đè lên một hệ thống tệp đang tồn tại sẽ huỷ hoại dữ liệu cũ. Làm mục lục mới đè lên mục lục cũ là mất sạch đồ cũ. Đừng làm nếu chưa chắc. The book keeps the word WARNING: create a filesystem only after adding a new disk or repartitioning an old one, and just once for each new partition with no preexisting data. Creating a new filesystem on top of an existing one will effectively destroy the old data.Superblock và các bản sao lưu
Khi bạn tạo hệ thống tệp,
mkfsin ra thông tin chẩn đoán trong lúc làm việc, trong đó có phần về superblock. Superblock là thành phần then chốt ở tầng trên cùng của cơ sở dữ liệu hệ thống tệp, và nó quan trọng đến mứcmkfstạo sẵn một số bản sao lưu phòng khi bản gốc bị phá hỏng. Ward khuyên bạn cân nhắc ghi lại vài con số bản sao lưu superblock khimkfschạy, phòng khi phải khôi phục.114mkfs thật ra là gì
Hoá ra
mkfschỉ là một frontend cho một loạt chương trình tạo hệ thống tệp mang tênmkfs.fs; khi bạn chạymkfs -t ext4, đến lượt nó chạymkfs.ext4.115 Và còn một tầng gián tiếp nữa: trong danh sáchls -l /sbin/mkfs.*của sách,mkfs.ext2,mkfs.ext3vàmkfs.ext4đều là liên kết tượng trưng trỏ tớimke2fs.114 Điều đó đáng nhớ khi bạn tra tài liệu: trang hướng dẫn thật nằm ởmke2fs(8). -
mount / umount
Gắn và gỡ — sáu trường của một dòng
mountTreo mục lục lên và gỡ xuống Mounting and unmounting — the six fields of amountlineGõ
mountkhông tham số để biết trạng thái hiện thời. Mỗi dòng ứng với một hệ thống tệp đang được gắn, theo đúng thứ tự: (1) thiết bị, (2) chữon, (3) điểm gắn kết, (4) chữtype, (5) kiểu hệ thống tệp, (6) các tuỳ chọn gắn trong ngoặc đơn.116 Để gắn thủ công:mount -t type device mountpoint— ví dụmount -t ext4 /dev/sdf2 /home/extra. Thường bạn không cần cung cấp-tvìmounttự đoán ra; nhưng đôi khi vẫn cần, chẳng hạn để phân biệt các kiểu FAT na ná nhau.1 Để gỡ:umount mountpoint, hoặc dùng tên thiết bị thay cho điểm gắn kết.1Muốn xem đang treo những gì: gõ
mount. Muốn treo thêm:mountkèm tên ngăn và tên thư mục. Muốn gỡ xuống:umountkèm tên thư mục. Nhớ nhé: rút USB thì phải gỡ xuống trước, đừng rút ngang.Type
mountwith no arguments to learn the current status. Each line corresponds to one mounted filesystem, in this order: (1) the device, (2) the wordon, (3) the mount point, (4) the wordtype, (5) the filesystem type, (6) the mount options in parentheses.116 To mount manually:mount -t type device mountpoint— for examplemount -t ext4 /dev/sdf2 /home/extra. You normally don't need-tbecausemountusually figures it out, though sometimes it's necessary to distinguish between similar FAT-style types.1 To unmount:umount mountpoint, or use the device instead of the mount point.1Bạn gặp nó ở đâuWhere you meet it Thư mục/mntcó mặt trên gần như mọi hệ Linux như một điểm gắn kết tạm để thử nghiệm — nhưng nếu định gắn lâu dài, Ward khuyên tìm hoặc tạo một chỗ khác. Khi bạn cắm ổ cứng ngoài và thấy nó hiện ra trong một thư mục. The/mntdirectory exists on almost every Linux system as a temporary mount point for testing — but for extended use, Ward advises finding or making another spot.Có những “thiết bị” không phải thiết bị
Trong đầu ra
mountmẫu, vài mục ở cột đầu không phải thiết bị thật —proclà ví dụ. Chúng chỉ là chỗ đứng thay cho tên thiết bị thật, vì những hệ thống tệp chuyên dụng ấy không cần thiết bị nào cả.1 Đó cũng là lý do trong danh sách ba thứ bạn cần biết để gắn, Ward mở ngoặc rằng vài hệ thống tệp chuyên dụng nhưprocvàsysfskhông có vị trí.1Gắn lại thay vì gỡ ra gắn vào
Có lúc bạn cần đổi tuỳ chọn của một hệ thống tệp đang được gắn; tình huống phổ biến nhất là khi cần biến một hệ thống tệp chỉ-đọc thành ghi được trong lúc khôi phục sau sự cố. Lệnh
mount -n -o remount /gắn lại thư mục gốc ở chế độ đọc-ghi; bạn cần-nvìmountkhông ghi được vào cơ sở dữ liệu gắn kết của hệ thống khi gốc đang ở chế độ chỉ-đọc. Lệnh này giả định rằng mục thiết bị đúng cho/có trong/etc/fstab; nếu không, bạn phải chỉ rõ thiết bị.116 -
UUID
UUID — vì tên thiết bị thì đổi, còn số hiệu thì không UUID — số hiệu riêng không bao giờ đổi The UUID — because device names change and serial numbers don't
Gắn theo tên thiết bị có một chỗ yếu: tên thiết bị đổi được, vì chúng phụ thuộc vào thứ tự nhân tìm thấy thiết bị. Giải pháp là nhận dạng và gắn hệ thống tệp bằng UUID — một chuẩn công nghiệp cho những “số sê-ri” duy nhất dùng để nhận dạng đối tượng trong máy tính. Các chương trình tạo hệ thống tệp như
mke2fssinh ra một UUID khi khởi tạo cấu trúc dữ liệu.114 Xem danh sách bằngblkid, và gắn bằngmount UUID=… /home/extra.117Tên ổ đĩa có thể đổi: hôm nay là ổ số một, mai cắm thêm ổ khác thì thành ổ số hai. Nhưng mỗi mục lục có một số hiệu riêng, dài và xấu, không bao giờ đổi. Máy dùng số hiệu đó để tìm đúng ổ. Nhớ nhé: tên đổi được, số hiệu thì không.
Mounting by device name has a weakness: device names can change, because they depend on the order in which the kernel finds the devices. The fix is to identify and mount filesystems by their UUID — an industry standard for unique "serial numbers" identifying objects in a computer system. Filesystem creation programs like
mke2fsgenerate a UUID when initialising the filesystem data structure.114 List them withblkid, and mount withmount UUID=… /home/extra.117Bạn gặp nó ở đâuWhere you meet it Mở/etc/fstabtrên bất kỳ bản phân phối hiện đại nào: cột đầu tiên gần như luôn làUUID=…chứ không phải/dev/sda1. Khi bạn mở tệp cấu hình của máy và thấy một dãy chữ số dài loằng ngoằng. Open/etc/fstabon any modern distribution: the first column is almost alwaysUUID=…, not/dev/sda1.FAT không có UUID thật
Trong đầu ra
blkidmẫu của sách có bốn phân vùng mang dữ liệu: hai ext4, một chữ ký swap, và một FAT. Các phân vùng bản địa Linux đều có UUID chuẩn, nhưng phân vùng FAT thì không — bạn tham chiếu nó bằng số sê-ri ổ đĩa FAT, trong ví dụ là4859-EFEA.117 Chính con số ngắn ấy cũng là điểm gắn kết: trên Ubuntu có người đăng nhập, thẻ nhớ đó sẽ được gắn ở/media/user/4859-EFEAkhi cắm vào, vàudevdcủa chương 3 xử lý sự kiện cắm thiết bị ban đầu.1Khi nào cần đổi UUID
Ward nói thực tế rằng bạn thường không gắn thủ công bằng UUID, vì bạn thường biết tên thiết bị và gõ tên thì dễ hơn gõ cái UUID điên rồ kia. Nhưng hiểu UUID vẫn quan trọng: đó là cách được ưa dùng để gắn tự động các hệ thống tệp không-LVM trong
/etc/fstablúc khởi động.1 Bạn cũng có thể đổi UUID khi cần — chẳng hạn khi vừa sao chép trọn một hệ thống tệp từ nơi khác về và giờ cần phân biệt nó với bản gốc; cách làm trên ext2/3/4 nằm ở trangtune2fs(8).118 -
mount options
Tuỳ chọn gắn — ngắn và dài, chung và riêng Các lựa chọn khi treo mục lục Mount options — short and long, general and specific
Ward thừa nhận “tổng số tuỳ chọn gắn nhiều đến choáng váng”; trang
mount(8)là tài liệu tham khảo tốt, nhưng khó biết bắt đầu từ đâu.116 Các tuỳ chọn chia thành hai nhóm thô: chung (thường dùng được cho mọi kiểu hệ thống tệp) và riêng theo hệ thống tệp. Kích hoạt một tuỳ chọn bằng-o— ví dụ-o remount,rwgắn lại ở chế độ đọc-ghi một hệ thống tệp đang chỉ-đọc.1Khi treo mục lục lên, bạn nói thêm được vài điều kiện: “chỉ cho đọc thôi, không cho sửa”, hay “không cho chạy chương trình từ đây”. Đó là các tuỳ chọn. Nhớ nhé: chỉ-đọc là cái khoá an toàn nhất.
Ward admits "the total number of mount options is staggering"; the
mount(8)manual page is a good reference, but it's hard to know where to start.116 Options fall into two rough categories: general (typically working for all filesystem types) and filesystem-specific. You activate an option with-o— for example-o remount,rwremounts a read-only filesystem in read-write mode.1Bạn gặp nó ở đâuWhere you meet it Phần trong ngoặc đơn ở cuối mỗi dòngmount—(rw,noexec,nosuid,nodev)— chính là bộ tuỳ chọn đang có hiệu lực. Phần trong ngoặc ở cuối mỗi dòng khi bạn gõmount. The parenthesised tail of everymountline —(rw,noexec,nosuid,nodev)— is the option set currently in force.Ba tuỳ chọn ngắn quan trọng nhất
-rgắn hệ thống tệp ở chế độ chỉ-đọc; bạn không cần chỉ định nó khi truy cập thiết bị vốn chỉ-đọc như CD-ROM, hệ thống sẽ tự làm và cũng báo cho bạn biết.-nbảo đảmmountkhông tìm cách cập nhật cơ sở dữ liệu gắn kết lúc chạy của hệ thống,/etc/mtab; mặc định thao tác gắn thất bại khi không ghi được tệp này, nên tuỳ chọn này quan trọng lúc khởi động — khi phân vùng gốc ban đầu còn ở chế độ chỉ-đọc — và cũng tiện khi sửa lỗi hệ thống trong chế độ một người dùng.-t typechỉ định kiểu hệ thống tệp.116Vì sao phải có tuỳ chọn dài
Lý do Ward đưa ra rất thực tế: các tuỳ chọn ngắn kiểu
-rquá hạn chế cho số lượng tuỳ chọn ngày một tăng — không đủ chữ cái trong bảng chữ cái — và một chữ cái đơn lẻ cũng khó đoán nghĩa. Vì vậy nhiều tuỳ chọn chung và tất cả tuỳ chọn riêng theo hệ thống tệp dùng dạng dài, viết sau-ovà ngăn cách bằng dấu phẩy. Ví dụ đầy đủ của sách:mount -t vfat /dev/sde1 /dos -o ro,uid=1000, trong đórolà chỉ-đọc vàuid=1000bảo nhân coi mọi tệp trên hệ thống tệp đó như thuộc sở hữu của người dùng có ID 1000.116 -
/etc/fstab
/etc/fstab — sáu trường, và hai con số hay bị đặt sai Danh sách “tự treo khi bật máy” /etc/fstab — six fields, two of them commonly mis-set
Để gắn hệ thống tệp lúc khởi động và bớt việc nhàm chán cho lệnh
mount, Linux giữ một danh sách cố định các hệ thống tệp và tuỳ chọn trong/etc/fstab— một tệp văn bản thuần với định dạng rất đơn giản.119 Mỗi dòng ứng với một hệ thống tệp và chia thành sáu trường, từ trái sang phải: thiết bị hoặc UUID; điểm gắn kết; kiểu hệ thống tệp; các tuỳ chọn dài ngăn bằng dấu phẩy; thông tin sao lưu cho lệnhdump; và thứ tự kiểm tra toàn vẹn hệ thống tệp.1Đây là tờ danh sách “mỗi lần bật máy thì treo sẵn những mục lục này lên”. Nhờ nó bạn không phải treo lại bằng tay mỗi sáng. Nhớ nhé: sửa tệp này sai thì máy có thể không khởi động được — sửa xong nhớ đọc lại.
To mount filesystems at boot time and take the drudgery out of the
mountcommand, Linux keeps a permanent list of filesystems and options in/etc/fstab— a plaintext file in a very simple format.119 Each line corresponds to one filesystem and is broken into six fields, left to right: the device or UUID; the mount point; the filesystem type; long options separated by commas; backup information for thedumpcommand; and the filesystem integrity test order.1Bạn gặp nó ở đâuWhere you meet it Nếu hệ thống tệp bạn cần đã có trong/etc/fstab, bạn đi đường tắt được: chỉ cầnmount /cdrom. Vàmount -acố gắng gắn đồng thời mọi mục không mang tuỳ chọnnoauto. Khi bạn chỉ cần gõmount /cdrommà máy vẫn hiểu. If the filesystem you want is already in/etc/fstabyou can take a shortcut: justmount /cdrom. Andmount -atries to mount every entry that doesn't carrynoauto.Trường 5 và trường 6
Hai trường cuối là nơi người ta hay đặt bừa. Trường dump:
dumplà một tiện ích sao lưu đã lỗi thời từ lâu, trường này không còn liên quan nữa — Ward bảo luôn đặt nó là 0. Trường thứ tự kiểm tra: để bảo đảmfsckluôn chạy trên gốc trước tiên, luôn đặt1cho hệ thống tệp gốc và2cho mọi hệ thống tệp gắn cục bộ khác trên đĩa cứng hay SSD; dùng0để tắt kiểm tra lúc khởi động cho mọi hệ thống tệp còn lại, kể cả thiết bị chỉ-đọc, swap, và hệ thống tệp/proc.119Bốn tuỳ chọn chỉ sống trong fstab
defaultsđặt các mặc định gắn: chế độ đọc-ghi, bật tệp thiết bị, bật chương trình thực thi, bật bit setuid, v.v. — dùng khi bạn không muốn tuỳ chọn đặc biệt nào nhưng vẫn phải điền đủ trường.errorslà tham số riêng của ext2/3/4, đặt hành vi của nhân khi hệ thống gặp trục trặc lúc gắn: mặc định thường làerrors=continue(trả mã lỗi và chạy tiếp),errors=remount-robảo nhân thử gắn lại ở chế độ chỉ-đọc, cònerrors=panicbảo nhân — và hệ thống của bạn — dừng hẳn.noautobảomount -abỏ qua mục đó, hữu ích để chặn việc gắn lúc khởi động cho phương tiện tháo lắp.usercho phép người dùng không đặc quyền chạymounttrên một mục cụ thể; vì người ta có thể đặt một tệp setuid-root lên phương tiện tháo lắp bằng hệ thống khác, tuỳ chọn này đồng thời bậtnosuid,noexecvànodev.119Hai lựa chọn thay thế
Dù
/etc/fstablà cách truyền thống, sách nêu hai lựa chọn khác. Thứ nhất là thư mục/etc/fstab.d, chứa các tệp cấu hình riêng lẻ cho từng hệ thống tệp — ý tưởng rất giống nhiều thư mục cấu hình khác trong sách. Thứ hai là cấu hình các unit systemd cho hệ thống tệp; tuy nhiên cấu hình unit của systemd thường được sinh ra từ (hoặc dựa trên) chính tệp/etc/fstab, nên bạn có thể thấy chúng chồng lấn nhau.1
Cụm khái niệm 03 Concept cluster 03
Sức chứa, sửa chữa, hệ thống tệp không có đĩa, và không gian tráo đổi Còn bao nhiêu chỗ, hỏng thì sửa, và bộ nhớ mượn từ đĩa Capacity, repair, disk-less filesystems, and swap space
Ba việc cuối của chương đều là việc thường ngày của quản trị viên: biết còn bao nhiêu chỗ trống, biết làm gì khi hệ thống tệp hỏng, và biết rằng không phải hệ thống tệp nào cũng nằm trên phương tiện vật lý. Ward chốt lại bằng swap — cách hệ thống bộ nhớ ảo mượn không gian đĩa khi RAM thật cạn.1
Phần cuối là ba việc bạn sẽ làm hằng ngày: xem còn bao nhiêu chỗ trống, sửa khi mục lục bị rách, và hiểu vì sao máy có những “mục lục” không nằm trên đĩa nào cả. Nhớ nhé: biết xem chỗ trống là kỹ năng đầu tiên.
The chapter's last three topics are all everyday administrator work: knowing how much space is left, knowing what to do when a filesystem breaks, and knowing that not every filesystem lives on physical media. Ward closes with swap — how the virtual memory system borrows disk space when real memory runs out.1
Định nghĩa. Swapping là việc hệ thống bộ nhớ ảo của Linux tự động chuyển các mảnh bộ nhớ ra và vào không gian lưu trữ trên đĩa khi bạn cạn bộ nhớ thật. Tên gọi đến từ chính hành động: các mảnh của chương trình đang nhàn rỗi được tráo ra đĩa để đổi lấy những mảnh đang hoạt động nằm trên đĩa. Vùng đĩa dùng để lưu các trang bộ nhớ ấy gọi là swap space — hay gọn hơn là swap.1
Nói đơn giản. Bàn làm việc của bạn nhỏ. Khi hết chỗ, bạn cất bớt mấy quyển sách đang không đọc xuống ngăn kéo, lấy chỗ cho quyển đang đọc. Máy tính cũng làm y như vậy với bộ nhớ: cất bớt xuống đĩa. Nhớ nhé: swap là cái ngăn kéo dưới gầm bàn.
Definition. Swapping is the Linux virtual memory system automatically moving pieces of memory to and from disk storage when you run out of real memory. The name comes from the act itself: pieces of idle programs are swapped to the disk in exchange for active pieces residing on the disk. The disk area used to store those memory pages is called swap space — or just swap.1
$ df → chỗ trống theo hệ thống tệp
$ du -s * → ai đang ngốn chỗ
# fsck /dev/sdb1 → kiểm tra (KHÔNG gắn!)
# mkswap dev ; swapon dev
df → còn bao nhiêu chỗ
du → ai chiếm chỗ
fsck → kiểm tra mục lục
mkswap → làm ngăn kéo
$ df → free space per filesystem
$ du -s * → who is eating the space
# fsck /dev/sdb1 → check (NOT mounted!)
# mkswap dev ; swapon dev
-
df / du
Sức chứa — và 5 phần trăm bị giấu đi Xem còn bao nhiêu chỗ trống Capacity — and the 5 percent that's hidden
Lệnh
dfcho biết kích thước và mức sử dụng của các hệ thống tệp đang gắn. Các trường của nó:Filesystemlà thiết bị;1K-blockslà tổng sức chứa tính theo khối 1.024 byte;Usedlà số khối đã chiếm;Availablelà số khối còn trống;Use%là phần trăm khối đang dùng; vàMounted onlà điểm gắn kết.121 Ward chỉ ra một điều lạ trong đầu ra mẫu: 127.989.560 cộng 75.339.204 không bằng 214.234.312, và 127.989.560 cũng không phải 63 phần trăm của 214.234.312 — cả hai trường hợp đều thiếu mất 5 phần trăm tổng sức chứa.1Gõ
dfđể xem còn bao nhiêu chỗ. Có một điều lạ: cộng phần đã dùng với phần còn trống lại không ra tổng. Vì máy giấu đi một phần nhỏ để dành cho trường hợp khẩn cấp. Nhớ nhé: máy luôn giữ lại một ít chỗ dự phòng cho riêng nó.The
dfcommand shows the size and utilisation of currently mounted filesystems. Its fields:Filesystemis the device;1K-blocksthe total capacity in 1,024-byte blocks;Usedthe occupied blocks;Availablethe free blocks;Use%the percentage in use;Mounted onthe mount point.121 Ward points at something odd in the sample output: 127,989,560 plus 75,339,204 does not equal 214,234,312, and 127,989,560 is not 63 percent of 214,234,312 — in both cases 5 percent of the total capacity is unaccounted for.1Bạn gặp nó ở đâuWhere you meet it Khi khó tìm đúng dòng trong đầu radf, chạydf dirđể giới hạn về hệ thống tệp của thư mục đó. Cách dùng rất phổ biến làdf .— giới hạn về thiết bị đang chứa thư mục hiện tại. Khi đĩa đầy và máy báo không lưu được tệp nữa. When it's hard to find the right line indfoutput, rundf dirto limit it to that directory's filesystem. A very common use isdf .— limiting output to the device holding your current directory.Khối dự trữ
Chỗ thiếu ấy thực ra vẫn còn, nhưng bị giấu trong các khối dự trữ (reserved blocks): chỉ siêu người dùng mới dùng được khối dự trữ của hệ thống tệp khi nó bắt đầu đầy. Tính năng này giữ cho các máy chủ hệ thống khỏi hỏng ngay lập tức khi hết dung lượng đĩa.114
Đi tìm kẻ ngốn chỗ với du
Nếu đĩa đầy và bạn cần biết đống tệp đa phương tiện đang nằm đâu, dùng
du. Không tham số,duin mức sử dụng đĩa của mọi thư mục trong cây, bắt đầu từ thư mục làm việc hiện tại.du -sbật chế độ tóm tắt, chỉ in tổng cộng. Muốn đánh giá mọi thứ trong một thư mục cụ thể, hãy chuyển vào đó và chạydu -s *— nhớ rằng lệnh này sẽ bỏ sót các thư mục bắt đầu bằng dấu chấm.122512 hay 1.024 byte?
Chuẩn POSIX định nghĩa kích thước khối là 512 byte. Nhưng kích thước đó khó đọc, nên mặc định đầu ra của
dfvàdutrên hầu hết bản phân phối Linux dùng khối 1.024 byte. Nếu bạn nhất định muốn hiển thị theo khối 512 byte, hãy đặt biến môi trườngPOSIXLY_CORRECT. Để chỉ định rõ khối 1.024 byte, dùng-k(cả hai tiện ích đều hỗ trợ). Cả hai cũng có-mđể liệt kê theo khối 1MB và-hđể đoán cách hiển thị dễ đọc nhất cho con người.12122 -
fsck
Kiểm tra và sửa chữa — năm lượt, một cảnh báo tuyệt đối Khi mục lục bị rách thì sửa thế nào Checking and repairing — five passes, one absolute warning
Công cụ kiểm tra hệ thống tệp là
fsck. Cũng nhưmkfs, có một phiên bảnfsckriêng cho từng kiểu hệ thống tệp; khi chạy trên dòng Extended (ext2/ext3/ext4),fscknhận ra kiểu và khởi động tiện íche2fsck— nên thường bạn không cần gõe2fsck.123 Chạy ở chế độ thủ công tương tác bằng cách đưa thiết bị hoặc điểm gắn kết làm tham số:fsck /dev/sdb1. Ở chế độ đó, nó in báo cáo chi tiết theo từng lượt: lượt 1 kiểm tra inode, khối và kích thước; lượt 2 kiểm tra cấu trúc thư mục; lượt 3 kiểm tra tính liên thông của thư mục; lượt 4 kiểm tra số đếm tham chiếu; lượt 5 kiểm tra thông tin tóm tắt nhóm.1Nếu mục lục bị rách — thường vì rút điện đột ngột — có một chương trình chuyên đi vá lại, tên là
fsck. Nó soát năm lượt, hỏi bạn từng chỗ hỏng. Nhưng tuyệt đối không được vá một quyển mục lục đang treo trên tường. Nhớ nhé: gỡ xuống rồi mới sửa.The tool to check a filesystem is
fsck. As withmkfs, there's a different version for each filesystem type; run on the Extended series (ext2/ext3/ext4),fsckrecognises the type and startse2fsck, so you generally don't need to typee2fsckyourself.123 Run it in interactive manual mode by giving the device or mount point as the argument:fsck /dev/sdb1. In that mode it prints verbose per-pass reports: pass 1 checks inodes, blocks and sizes; pass 2 the directory structure; pass 3 directory connectivity; pass 4 reference counts; pass 5 group summary information.1Cảnh báo của tác giảThe author's warning Sách để nguyên chữ WARNING: đừng bao giờ dùngfscktrên một hệ thống tệp đang được gắn — nhân có thể thay đổi dữ liệu đĩa ngay trong lúc bạn chạy kiểm tra, gây ra những lệch pha lúc chạy có thể làm sập hệ thống và hỏng tệp. Chỉ có một ngoại lệ: nếu bạn gắn phân vùng gốc ở chế độ chỉ-đọc trong chế độ một người dùng, bạn được dùngfscktrên nó. Không bao giờ sửa mục lục đang treo. Gỡ xuống trước đã. The book keeps the word WARNING: never usefsckon a mounted filesystem — the kernel may alter the disk data as you run the check, causing runtime mismatches that can crash your system and corrupt files. There is exactly one exception: if you mount the root partition read-only in single-user mode, you may usefsckon it.lost+found và những inode lạc
Khi
fscktìm thấy vấn đề ở chế độ thủ công, nó dừng lại và hỏi một câu liên quan tới việc sửa — những câu về cấu trúc bên trong hệ thống tệp, như nối lại các inode lạc và xoá khối. Khifsckhỏi bạn về việc nối lại một inode, nghĩa là nó vừa tìm thấy một tệp dường như không có tên. Khi nối lại tệp như vậy,fsckđặt nó vào thư mụclost+foundcủa hệ thống tệp, với một con số làm tên tệp. Lúc đó bạn phải đoán tên dựa vào nội dung; tên gốc gần như chắc chắn đã mất.123Ba cờ đáng nhớ: -p, -n, -b
e2fsck -ptự động sửa những vấn đề thông thường mà không hỏi, và bỏ cuộc khi gặp lỗi nghiêm trọng — các bản phân phối Linux chạy một biến thể củafsck -plúc khởi động (bạn cũng có thể thấyfsck -a, làm y hệt).1 Nếu bạn nghĩ có chuyện thật sự tệ đã xảy ra, hãy thửfsck -nđể kiểm tra mà không sửa gì cả. Nếu bạn nghi chỉ superblock hỏng, có thể khôi phục bằng một trong các bản sao lưu superblock màmkfsđã tạo:fsck -b numthay superblock hỏng bằng bản dự phòng ở khối num. Và nếu không biết tìm bản sao lưu ở đâu, bạn có thể chạymkfs -ntrên thiết bị để xem danh sách số hiệu superblock dự phòng mà không phá dữ liệu — Ward nhấn mạnh hãy chắc chắn có-n, nếu không bạn sẽ thật sự xé nát hệ thống tệp.123Vì sao ext3/ext4 hiếm khi cần kiểm tra tay
Bạn thường không cần kiểm tra ext3 và ext4 thủ công, vì journal bảo đảm toàn vẹn dữ liệu — journal là một vùng đệm dữ liệu nhỏ chưa được ghi vào đúng chỗ của nó trong hệ thống tệp. Nếu bạn không tắt máy sạch sẽ, hãy chờ đợi journal còn chứa dữ liệu. Để xả journal của một hệ thống tệp ext3 hay ext4 về cơ sở dữ liệu thường, chạy
e2fsck -fy /dev/disk_device. Tuy vậy có lúc bạn lại muốn gắn một hệ thống tệp ext3/ext4 hỏng ở chế độ ext2, vì nhân sẽ không gắn một hệ thống tệp ext3 hay ext4 có journal chưa rỗng.111Tình huống xấu nhất
Với sự cố đĩa nghiêm trọng hơn, sách cho ba lựa chọn: trích toàn bộ ảnh hệ thống tệp ra khỏi đĩa bằng
ddvà chuyển sang một phân vùng trên đĩa khác cùng kích thước; vá hệ thống tệp hết mức có thể, gắn ở chế độ chỉ-đọc và cứu được gì hay nấy; hoặc thửdebugfs. Công cụdebugfscho phép bạn nhìn xuyên qua các tệp trên hệ thống tệp và chép chúng đi nơi khác; mặc định nó mở hệ thống tệp ở chế độ chỉ-đọc.125 Ward nói thẳng về lựa chọnfsck -y(trả lời có cho mọi câu hỏi): chỉ làm như biện pháp cuối cùng, vì trong quá trình sửa có thể nảy sinh những vấn đề mà bạn muốn tự tay xử lý hơn.1 -
special-purpose filesystems
Hệ thống tệp chuyên dụng — proc, sysfs, tmpfs, squashfs, overlay Những “mục lục” không nằm trên đĩa nào cả Special-purpose filesystems — proc, sysfs, tmpfs, squashfs, overlay
Không phải hệ thống tệp nào cũng đại diện cho lưu trữ trên phương tiện vật lý. Hầu hết phiên bản Unix có những hệ thống tệp đóng vai trò giao diện hệ thống: thay vì chỉ là phương tiện cất dữ liệu lên thiết bị, một hệ thống tệp có thể đại diện cho thông tin hệ thống, như ID tiến trình và chẩn đoán của nhân.1 Ward truy nguyên ý tưởng này về cơ chế
/dev— một mô hình sơ khai của việc dùng tệp làm giao diện vào/ra; ý tưởng/procđến từ phiên bản thứ tám của Unix nghiên cứu, do Tom J. Killian hiện thực, và được đẩy nhanh khi Bell Labs tạo ra Plan 9.126Có những mục lục không ghi về đồ đạc trên đĩa, mà ghi về chính cái máy: máy đang chạy chương trình nào, bộ xử lý là loại gì. Bạn mở chúng ra đọc như đọc tệp bình thường, nhưng chúng không chiếm chỗ trên đĩa. Nhớ nhé: có những thư mục chỉ là cửa sổ nhìn vào ruột máy.
Not all filesystems represent storage on physical media. Most versions of Unix have filesystems that serve as system interfaces: rather than only storing data on a device, a filesystem can represent system information such as process IDs and kernel diagnostics.1 Ward traces the idea back to the
/devmechanism — an early model of using files for I/O interfaces; the/procidea came from the eighth edition of research Unix, implemented by Tom J. Killian, and accelerated when Bell Labs created Plan 9.126Bạn gặp nó ở đâuWhere you meet it Mỗi lần bạncat /proc/cpuinfo— bạn vừa đọc một “tệp” không hề tồn tại trên đĩa nào. Khi bạn xem thông tin bộ xử lý của máy bằng cách đọc một tệp. Every time youcat /proc/cpuinfo— you just read a "file" that exists on no disk.proc và sysfs
proc được gắn ở
/proc; cái tên là dạng viết tắt của process. Mỗi thư mục đánh số bên trong/procứng với ID của một tiến trình hiện tại trên hệ thống, và các tệp trong mỗi thư mục biểu diễn nhiều khía cạnh khác nhau của tiến trình đó;/proc/selfđại diện cho tiến trình hiện tại. Hệ thống tệp proc của Linux còn chứa rất nhiều thông tin bổ sung về nhân và phần cứng trong những tệp như/proc/cpuinfo. Ward nhắc một điểm dễ bỏ qua: hướng dẫn thiết kế nhân khuyến nghị chuyển những thông tin không liên quan tới tiến trình ra khỏi/procvà đưa vào/sys, nên thông tin hệ thống trong/proccó thể không phải giao diện mới nhất.127 sysfs được gắn ở/sys— bạn đã gặp nó ở chương 3.1tmpfs — bộ nhớ đội lốt thư mục
tmpfs được gắn ở
/runvà vài chỗ khác. Với tmpfs, bạn dùng bộ nhớ vật lý và không gian swap làm nơi lưu trữ tạm. Bạn gắn tmpfs ở đâu tuỳ thích, dùng các tuỳ chọn dàisizevànr_blocksđể khống chế kích thước tối đa.128 Nhưng Ward cảnh báo: hãy cẩn thận đừng liên tục đổ mọi thứ vào một vị trí tmpfs, vì rốt cuộc hệ thống sẽ hết bộ nhớ và các chương trình sẽ bắt đầu sập.1squashfs và overlay
squashfs là một kiểu hệ thống tệp chỉ-đọc, trong đó nội dung được lưu ở dạng nén và giải nén theo yêu cầu qua một thiết bị loopback; một ví dụ sử dụng là hệ quản lý gói snap, vốn gắn các gói dưới thư mục
/snap.129 overlay là hệ thống tệp hợp nhất nhiều thư mục thành một thư mục tổng hợp; các container thường dùng hệ thống tệp overlay, và chương 17 sẽ cho thấy chúng hoạt động thế nào.130 -
swap space
Không gian tráo đổi — ba bước, và một quy tắc đã lỗi thời Ngăn kéo dưới gầm bàn Swap space — three steps, and a rule that has aged out
Không phải phân vùng nào trên đĩa cũng chứa hệ thống tệp.1 Để dùng trọn một phân vùng làm swap, sách nêu ba bước: (1) bảo đảm phân vùng rỗng; (2) chạy
mkswap dev— lệnh này đặt một chữ ký swap lên phân vùng, đánh dấu nó là không gian swap chứ không phải hệ thống tệp; (3) chạyswapon devđể đăng ký không gian đó với nhân.13132 Sau đó bạn thêm một mục swap vào/etc/fstabđể hệ thống dùng nó ngay khi máy khởi động; mục mẫu của sách là/dev/sda5 none swap sw 0 0.1 Chữ ký swap cũng có UUID, nên nhiều hệ thống nay dùng UUID thay cho tên thiết bị thô.1Bạn có thể dành hẳn một ngăn tủ làm chỗ để đồ tạm cho máy. Ba bước: chắc chắn ngăn trống, dán nhãn “ngăn để tạm”, rồi báo cho máy biết. Từ đó máy tự dùng khi bàn hết chỗ. Nhớ nhé: ngăn kéo chậm hơn bàn rất nhiều — dùng ít thôi thì tốt.
Not every partition on a disk contains a filesystem.1 To use an entire partition as swap, the book gives three steps: (1) make sure the partition is empty; (2) run
mkswap dev— this puts a swap signature on the partition, marking it as swap space rather than a filesystem; (3) runswapon devto register the space with the kernel.13132 You then add a swap entry to/etc/fstabso the system uses it as soon as the machine boots; the book's sample entry is/dev/sda5 none swap sw 0 0.1 Swap signatures have UUIDs, so many systems now use those instead of raw device names.1Bạn gặp nó ở đâuWhere you meet it Đầu ra lệnhfreecó một dòngSwap:— nó cho biết mức dùng swap hiện tại, tính bằng kilobyte. Dòng có chữSwapkhi bạn gõ lệnhfree. Thefreecommand's output has aSwap:line — it reports current swap usage in kilobytes.Dùng một tệp thay cho phân vùng
Bạn dùng được một tệp thường làm swap, trong tình huống mà nếu không thì phải phân vùng lại đĩa để tạo phân vùng swap — và Ward nói bạn sẽ không thấy vấn đề gì khi làm vậy. Ba lệnh của sách:
dd if=/dev/zero of=swap_file bs=1024k count=num_mbđể tạo tệp rỗng, rồimkswap swap_file, rồiswapon swap_file; ở đây num_mb là kích thước mong muốn tính bằng megabyte.133 Để gỡ một phân vùng hay tệp swap khỏi nhóm đang hoạt động của nhân, dùngswapoff— nhưng hệ thống phải còn đủ bộ nhớ trống (thật và swap cộng lại) để chứa mọi trang đang hoạt động trong phần bạn sắp gỡ.132“Gấp đôi RAM” đến từ đâu
Ward kể lại nguồn gốc của quy tắc kinh nghiệm cũ: có thời trí khôn thông thường của Unix nói rằng bạn nên luôn dành ít nhất gấp đôi bộ nhớ thật cho swap. Quy tắc ấy có từ thời nhiều người dùng cùng đăng nhập vào một máy; không phải ai cũng đang hoạt động, nên việc tráo bộ nhớ của những người nhàn rỗi ra đĩa là tiện lợi.1 Ngày nay, dung lượng đĩa và bộ nhớ khổng lồ đã làm vấn đề mờ đi, và cách ta dùng máy cũng đã khác: một mặt đĩa rẻ đến mức dễ cấp phát hơn gấp đôi, mặt khác bạn có thể chẳng bao giờ chạm tới swap vì RAM thật quá dư dả.134
Khi swap trở thành vấn đề
Nếu bạn chạy nhiều tiến trình, tráo ra các phần của tiến trình nhàn rỗi — hay cả những mảnh nhàn rỗi của tiến trình đang hoạt động — nói chung là ổn. Nhưng nếu bạn thường xuyên truy cập swap vì quá nhiều tiến trình hoạt động cùng muốn dùng bộ nhớ một lúc, bạn sẽ gặp vấn đề hiệu năng nghiêm trọng: vào/ra đĩa, kể cả của SSD, đơn giản là quá chậm để theo kịp phần còn lại của hệ thống. Ward liệt kê đúng ba giải pháp, trong đó cái cuối là một câu đùa nghiêm túc: mua thêm bộ nhớ, kết thúc bớt tiến trình, hoặc than phiền.1
OOM killer và chuyện không cấu hình swap
Đôi khi nhân Linux chọn tráo một tiến trình ra đĩa để đổi lấy thêm một chút cache đĩa; để ngăn hành vi đó, một số quản trị viên cấu hình vài hệ thống hoàn toàn không có swap — ví dụ máy chủ hiệu năng cao thì không bao giờ nên chạm vào swap và nên tránh truy cập đĩa hết mức có thể.135 Nhưng Ward kèm ngay một ghi chú cảnh báo: cấu hình không có swap trên một máy đa dụng là nguy hiểm. Nếu máy cạn hoàn toàn cả bộ nhớ thật lẫn swap, nhân Linux sẽ gọi OOM killer (out-of-memory killer) để giết một tiến trình nhằm giải phóng bộ nhớ — điều hiển nhiên bạn không muốn xảy ra với ứng dụng trên máy để bàn của mình. Mặt khác, các máy chủ hiệu năng cao có hệ thống giám sát, dự phòng và cân bằng tải tinh vi để bảo đảm chúng không bao giờ chạm vùng nguy hiểm.136
Đính chính Corrections
Ba ngộ nhận mà người đọc lần đầu hay mắc Ba chỗ hay hiểu nhầm Three misconceptions first readers hit
Phần này thuộc mức đọc Đầy đủ: nó đối chiếu điều người đọc thường nghĩ với điều bản văn thật sự nói.
Phần này hơi khó, bạn có thể bỏ qua và quay lại sau. Nhớ nhé: hiểu chậm mà chắc vẫn hơn.
This block belongs to the Đầy đủ (full) reading level: it sets what readers usually assume against what the text actually says.
“Phân vùng xong là đĩa dùng được” "Once it's partitioned, the disk is usable"
Ngộ nhận: công cụ phân vùng chuẩn bị đĩa cho việc lưu trữ, nên sau khi fdisk ghi bảng xong là chép tệp vào được.
Bản văn nói: có một khác biệt then chốt giữa phân vùng và thao tác hệ thống tệp — bảng phân vùng chỉ định nghĩa ranh giới đơn giản trên đĩa, còn hệ thống tệp là một hệ dữ liệu phức tạp hơn nhiều; chính vì thế người ta dùng những công cụ tách bạch cho hai việc.1 Một phân vùng chưa có mkfs vẫn chỉ là một dãy khối.1
Misconception: the partitioning tool prepares the disk for storage, so once fdisk has written the table you can copy files in.
The text says: there's a critical difference between partitioning and filesystem manipulation — the partition table defines simple boundaries on the disk, whereas a filesystem is a much more involved data system; that's exactly why separate tools are used.1 A partition without mkfs is still just a run of blocks.1
“Lưu xong là dữ liệu đã nằm trên đĩa” "Once it's saved, the data is on the disk"
Ngộ nhận: khi chương trình báo đã lưu, dữ liệu đã thật sự nằm trên đĩa vật lý.
Bản văn nói: Linux đệm các thao tác ghi; nhân thường không ghi thay đổi ngay khi tiến trình yêu cầu, mà giữ chúng trong RAM cho tới khi nó xác định được thời điểm tốt để thật sự ghi xuống.1 Đó là lý do umount tự động đồng bộ, và là lý do Ward dặn chạy sync trước khi tắt máy nếu bạn không gỡ được hệ thống tệp.120
Misconception: when the program says it saved, the data is genuinely on the physical disk.
The text says: Linux buffers writes; the kernel usually doesn't write changes immediately when processes request them, but stores them in RAM until it determines a good time to actually write them out.1 That's why umount synchronises automatically, and why Ward tells you to run sync before powering off if you can't unmount.120
“Có journal thì không bao giờ phải chạy fsck” "With a journal you never need fsck"
Ngộ nhận: ext4 có journal nên hệ thống tệp miễn nhiễm với hỏng hóc.
Bản văn nói: tuy nhiều hệ thống tệp hỗ trợ journal khiến hỏng hóc hiếm đi rất nhiều, bạn vẫn luôn nên tắt máy đúng cách, và bất kể dùng hệ thống tệp nào, thỉnh thoảng vẫn cần kiểm tra hệ thống tệp để chắc rằng mọi thứ còn ổn.1 Journal chỉ là một vùng đệm dữ liệu nhỏ chưa được ghi vào đúng chỗ của nó — nó thu hẹp cửa sổ rủi ro, không xoá bỏ nó.111
Misconception: ext4 has a journal, so the filesystem is immune to corruption.
The text says: although many filesystems support journals that make corruption far less common, you should always shut down properly, and regardless of the filesystem in use, filesystem checks are still necessary every now and then to make sure everything is in order.1 A journal is only a small data cache not yet written to its specific spot — it narrows the window of risk, it doesn't remove it.111
Tự kiểm tra Self-check
Bạn đã nắm các tầng của một cái đĩa chưa? Thử trả lời xem nào Do you have the disk's layers yet?
Trả lời bằng lời của bạn, không tra sách. Nếu một câu khiến bạn ngập ngừng, đó chính là tầng bạn nên đọc lại.
Thử trả lời miệng thôi, không cần giở lại. Câu nào bí thì quay lại đọc phần đó nhé. Nhớ nhé: chỗ bí chính là chỗ cần học.
Answer in your own words, without looking back. Whichever question makes you hesitate points at the layer you should reread.
-
Bảng phân vùng chứa gì, và vì sao nó không chứa hệ thống tệp?
Gợi ý sâu hơn: nói lại bằng lời mình cái “khác biệt then chốt” mà Ward đặt ra giữa phân vùng và thao tác hệ thống tệp.
-
Khác biệt sống còn giữa cách
fdiskvàpartedthay đổi đĩa là gì?Gợi ý sâu hơn: lệnh nào trong
fdiskcho bạn thoát ra mà không ghi gì? -
Vì sao
/etc/fstabhiện đại dùngUUID=thay cho/dev/sda1?Gợi ý sâu hơn: tên thiết bị phụ thuộc vào cái gì, và điều đó thay đổi khi nào?
-
Vì sao rút ổ USB mà không
umountlại nguy hiểm, dù bạn đã bấm “lưu”?Gợi ý sâu hơn: lệnh nào ép nhân ghi bộ đệm xuống đĩa ngay lập tức?
-
Vì sao tuyệt đối không được chạy
fscktrên một hệ thống tệp đang được gắn — và ngoại lệ duy nhất là gì?Gợi ý sâu hơn:
fsckđặt những tệp không tên tìm được vào thư mục nào? -
/procvàtmpfsgiống nhau ở điểm nào, và khác nhau ở điểm nào?Gợi ý sâu hơn: cái nào tiêu thụ bộ nhớ vật lý của bạn, và vì sao đổ dữ liệu vào nó mãi là nguy hiểm?
-
Ba bước để biến một phân vùng rỗng thành không gian swap là gì?
Gợi ý sâu hơn: điều gì xảy ra khi máy cạn cả bộ nhớ thật lẫn swap?
Từ cái đĩa đến thư mục của bạn có mấy chặng? Kể tên.
Bảng phân vùng ghi cái gì — đồ đạc hay ranh giới?
Lệnh nào dùng để xem đĩa còn bao nhiêu chỗ trống?
Vì sao rút USB đột ngột lại có thể mất dữ liệu?
Swap là gì? Giải thích bằng hình ảnh cái bàn và ngăn kéo.
-
What does a partition table contain, and why does it not contain a filesystem?
-
What is the crucial difference in how
fdiskandpartedchange a disk? -
Why does a modern
/etc/fstabuseUUID=rather than/dev/sda1? -
Why is pulling a USB drive without
umountdangerous, even after you pressed save? -
Why must you never run
fsckon a mounted filesystem — and what is the single exception? -
What do
/procandtmpfshave in common, and how do they differ? -
What are the three steps that turn an empty partition into swap space?
Khép lại chương Closing the chapter
Bảng phân vùng chỉ định nghĩa những ranh giới đơn giản trên đĩa; hệ thống tệp là một hệ dữ liệu phức tạp hơn nhiều — và chính vì thế, hai việc ấy có hai bộ công cụ riêng.1 Muốn đọc dữ liệu một tệp, bạn lấy đúng vị trí phân vùng từ bảng, rồi tra cơ sở dữ liệu hệ thống tệp trên phân vùng đó.1
Bảng phân vùng chỉ kẻ ranh giới; hệ thống tệp mới là quyển mục lục. Hai việc khác nhau, hai công cụ khác nhau. Nhớ nhé: kẻ ô là một việc, làm mục lục là việc khác.
The partition table defines only simple boundaries on the disk; a filesystem is a much more involved data system — and that is exactly why the two have separate tools.1 To read a file's data, you take the right partition location from the table, then search the filesystem database on that partition.1