How Linux Works Chương 12 · Network File Transfer and Sharing

Chương 12 · Truyền và chia sẻ tệp qua mạng Chapter 12 · Network File Transfer and Sharing

Có quá nhiều cách đưa tệp qua mạng, vì không cách nào đủ tốt cho mọi tình huống Nhiều cách gửi tệp qua mạng — vì chẳng cách nào hoàn hảo There are so many ways to move files across a network because no single way is good enough

Brian Ward mở chương này bằng một bảng tình huống: mỗi nhu cầu chia sẻ tệp lại ứng với một công cụ khác nhau — máy chủ web SimpleHTTPServer của Python cho việc đưa tạm một thư mục ra mạng, rsync cho việc sao chép định kỳ, Samba cho máy Windows, CIFS để gắn thư mục chia sẻ của Windows vào Linux, SSHFS cho chia sẻ quy mô nhỏ giữa các máy Linux, NFS cho NAS trong mạng nội bộ tin cậy, và các hệ tệp dựa trên FUSE cho lưu trữ đám mây.1 Ông cũng nói rõ điều không có trong danh sách: chia sẻ quy mô lớn giữa nhiều địa điểm với nhiều người dùng — không phải bất khả thi, nhưng thường tốn khá nhiều công sức và nằm ngoài phạm vi quyển sách.1

Bạn muốn gửi một tệp sang máy khác. Có rất nhiều cách làm: mở một trang web tạm, dùng lệnh rsync, hoặc “gắn” hẳn thư mục máy kia vào máy mình như một ổ đĩa. Mỗi cách hợp với một hoàn cảnh riêng. Nhớ nhé: chọn cách theo việc bạn cần, đừng chọn theo cách nào nghe oai nhất.

Brian Ward opens this chapter with a table of scenarios: each file-sharing need maps to a different tool — Python's SimpleHTTPServer for making a directory temporarily available, rsync for regular copying, Samba for Windows machines, CIFS for mounting Windows shares on Linux, SSHFS for small-scale sharing between Linux machines, NFS for a NAS on a trusted local network, and FUSE-based filesystems for cloud storage.1 He is equally clear about what is not in the list: large-scale sharing across multiple locations with many users — not impossible, but generally a fair amount of work and outside the book's scope.1

Điểm lạ của chương này, Ward tự ghi chú: khác với nhiều chương khác trong sách, phần cuối chương không phải tài liệu nâng cao. Thật ra hai mục “lý thuyết” nhất — 12.3 và 12.8 — lại là nơi bạn thu được nhiều giá trị nhất, vì chúng giải thích vì sao ngay từ đầu lại có nhiều lựa chọn đến thế.1 Nói cách khác, chương này không dạy bạn một công cụ; nó dạy bạn cách đọc một hệ sinh thái công cụ chưa hội tụ.

Luận đề của chương: truyền tệp và chia sẻ tệp là hai bài toán khác nhau — sao chép (copy) đưa dữ liệu sang rồi kết thúc, còn chia sẻ thật sự (true file sharing) gắn một thư mục của máy này vào máy kia và để nó sống ở đó.1 Danh sách công cụ dài không phải vì Linux thừa thãi, mà vì hiệu năng và bảo mật của chia sẻ qua mạng vẫn chưa có một lời giải chuẩn.1

Ý chính: “gửi một bản sao” và “dùng chung một thư mục” là hai việc khác nhau. Có nhiều công cụ vì chưa có công cụ nào vừa nhanh vừa an toàn vừa dễ cài. Nhớ nhé: chép là chép, dùng chung là dùng chung — đừng lẫn hai việc.

The chapter's thesis: transferring files and sharing files are two different problems — copying moves the data over and finishes, whereas true file sharing attaches a directory on one machine to another machine and lets it live there.1 The long list of tools is not Linux being redundant; it is the absence of a settled answer to network sharing's performance and security problems.1

Cụm khái niệm 01 Concept cluster 01

Sao chép: từ một lần cho xong tới rsync làm đi làm lại Chép tệp: cách nhanh và cách chuyên nghiệp Copying: from a one-off to rsync doing it again and again

Ward chia bài toán sao chép theo tần suất. Cần đưa vài tệp sang máy bên cạnh một lần duy nhất? Một máy chủ web tạm là đủ. Cần chép cả cây thư mục? scp -r làm được việc nhưng “không linh hoạt lắm”: sau khi chép xong, máy đích có thể không có bản sao chính xác của thư mục nguồn, vì các tệp thừa đã nằm sẵn ở đích vẫn tồn tại.1 Nếu bạn định làm việc này thường xuyên — nhất là khi định tự động hoá — ông khuyên dùng một hệ đồng bộ chuyên dụng biết phân tích và kiểm chứng; trên Linux, rsync là bộ đồng bộ chuẩn.1

Chép một lần thì làm cách nhanh. Chép đi chép lại thì cần công cụ biết nhớ: lần sau nó chỉ gửi phần đã đổi, và nó kiểm tra lại giùm bạn. Công cụ đó tên là rsync. Nhớ nhé: làm một lần thì tuỳ tiện cũng được, làm nhiều lần thì phải có công cụ.

Ward splits the copying problem by frequency. Need to get a couple of files to the machine next to you, once? A temporary web server is enough. Need to copy a whole directory tree? scp -r gets the job done but "is not very flexible": after the transfer, the remote host may not hold an exact copy of the directory, because extraneous files already at the destination persist.1 If you expect to do this regularly — and especially if you plan to automate it — he recommends a dedicated synchronizer that can also analyse and verify; on Linux, rsync is the standard one.1

Về python -m SimpleHTTPServer. Ward ghi lệnh ở dạng Python 2, và lưu ý nó chạy ở cổng 8000 theo mặc định, nên từ máy đích bạn trỏ trình duyệt tới http://10.1.2.4:8000 nếu máy nguồn ở địa chỉ đó.1 Trên Python 3, ba mô-đun BaseHTTPServer, CGIHTTPServer và SimpleHTTPServer đã được gộp vào gói http,7 nên lệnh tương đương ngày nay là python -m http.server — tài liệu Python xác nhận nó “lắng nghe ở cổng 8000 theo mặc định”, và cổng có thể ghi đè bằng tham số.6 Trang này ghi cả hai thay vì lặng lẽ sửa chữ của tác giả.

Định nghĩa. rsync là một bộ đồng bộ (synchronizer): thay vì gửi mù toàn bộ, nó so sánh hai bên rồi chỉ gửi phần khác biệt. Theo trang rsync(1), mặc định nó dùng thuật toán “kiểm tra nhanh” (quick check) tìm các tệp đã đổi kích thước hoặc thời điểm sửa cuối.2 Ward mô tả cùng cơ chế: phép kiểm dùng tổ hợp kích thước tệp và ngày sửa cuối.1

Nói đơn giản. rsync giống người chuyển nhà thông minh: nó nhìn hai bên, thấy món nào giống hệt thì bỏ qua, chỉ khuân món đã đổi. Nhớ nhé: nó so trước, chép sau.

Definition. rsync is a synchronizer: instead of blindly resending everything, it compares the two sides and sends only the differences. Per rsync(1), by default it uses a "quick check" algorithm that looks for files changed in size or in last-modified time.2 Ward describes the same mechanism: the check uses a combination of file size and last-modified date.1

rsync -nva dir host:dest_dir
  -n → chạy thử, không chép
  -v → kể ra đang làm gì
  -a → cả cây, giữ nguyên thuộc tính

-n → thử thôi
-v → nói cho mình nghe
-a → chép cả thư mục

rsync -nva dir host:dest_dir
  -n → trial run, copies nothing
  -v → say what you are doing
  -a → whole tree, attributes preserved

  1. quick copy

    Quick copy — một máy chủ web sống đúng năm phút Chép nhanh — mở tạm một trang web Quick copy — a web server that lives five minutes

    Khi bạn chỉ muốn đưa tệp sang máy khác trong mạng cá nhân, không cần chép ngược, không cần gì cầu kỳ, Ward chỉ một mẹo: vào thư mục chứa tệp rồi chạy python -m SimpleHTTPServer. Lệnh này khởi động một máy chủ web cơ bản, biến thư mục hiện tại thành thứ mà bất kỳ trình duyệt nào trên mạng cũng lấy được.1

    Bạn đứng ở thư mục có tệp, gõ một lệnh, thế là máy bạn thành một trang web nhỏ. Máy bên kia mở trình duyệt, bấm tải về là xong. Gõ Ctrl-C là trang web biến mất. Nhớ nhé: mở tạm, lấy xong thì đóng.

    When you only want to get files to another machine on your personal network — no copying back, nothing fancy — Ward gives one trick: go to the directory holding the files and run python -m SimpleHTTPServer. That starts a basic web server making the current directory available to any browser on the network.1

    Cảnh báo của tác giảThe author's warning Cách này giả định mạng nội bộ của bạn an toàn. Đừng làm thế trên mạng công cộng hay bất kỳ môi trường mạng nào bạn không tin.1 Chỉ làm ở nhà hoặc ở nơi bạn tin. Đừng làm ở quán cà phê. This method assumes your local network is secure. Don't do it on a public network or any network environment you do not trust.1

    Tài liệu Python nói gì

    Tài liệu chính thức của mô-đun kế nhiệm mang đúng cảnh báo ấy ở dạng kỹ thuật: “http.server is not recommended for production. It only implements basic security checks.”6 Mục cân nhắc bảo mật còn nói thêm SimpleHTTPRequestHandler sẽ đi theo liên kết tượng trưng, nên tệp ngoài thư mục được chỉ định vẫn có thể bị phục vụ.6

    Mặc định cổng 8000

    Cả Ward lẫn tài liệu Python đều ghi cổng mặc định là 8000; tài liệu bổ sung rằng có thể ghi đè bằng cách truyền số cổng làm tham số, và --bind giới hạn địa chỉ lắng nghe.16

  2. trailing slash

    Dấu gạch chéo cuối — một ký tự đổi hẳn kết quả Dấu / ở cuối — nhỏ mà đổi mọi thứ The trailing slash — one character changes the outcome

    Đây là chỗ sai kinh điển, và Ward dặn phải đặc biệt cẩn thận. Với rsync -a dir host:dest_dir, khi xong bạn sẽ có thư mục dir nằm bên trong dest_dir trên host.1 Thêm một dấu / vào tên nguồn thì hành vi đổi hẳn: rsync -a dir/ host:dest_dir chép mọi thứ bên trong dir vào dest_dir mà không tạo ra dir ở đích — gần giống cp dir/* dest_dir trên hệ tệp cục bộ.1

    Nghĩ thế này: dir là “gửi cả cái hộp”, còn dir/ là “gửi những thứ trong hộp, bỏ hộp lại”. Thiếu hay thừa một dấu gạch chéo là ra hai kết quả khác nhau. Nhớ nhé: có gạch chéo = đổ ruột ra; không gạch chéo = bê nguyên hộp.

    This is the classic mistake, and Ward says to be particularly careful. With rsync -a dir host:dest_dir, on completion you have the directory dir inside dest_dir on host.1 Adding a / to the source name changes the behaviour significantly: rsync -a dir/ host:dest_dir copies everything inside dir into dest_dir without creating dir at the destination — similar to cp dir/* dest_dir on the local filesystem.1

    Ví dụ của tác giảThe author's example Có dir/a và dir/b. Bản có gạch chéo cho dest_dir chứa a và b nhưng không có dir; bản bỏ gạch chéo cho ra dest_dir/dir/a và dest_dir/dir/b.1 Hộp có hai món a và b. Một cách để lại hai món; cách kia để lại nguyên cái hộp có hai món bên trong. You have dir/a and dir/b. The trailing-slash version leaves dest_dir holding a and b but no dir; omitting the slash yields dest_dir/dir/a and dest_dir/dir/b.1

    Trang man nói cùng một điều

    “A trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination.” Man page gợi ý cách nhớ: dấu / cuối nghĩa là “chép nội dung thư mục này”, đối lập với “chép thư mục theo tên”; ở cả hai trường hợp, thuộc tính của thư mục chứa vẫn được chuyển sang thư mục chứa ở đích.2 Hệ quả: rsync -av /src/foo /dest và rsync -av /src/foo/ /dest/foo cho kết quả như nhau.2

    Vì sao đây là cái bẫy chứ không phải phiền toái

    Ward nói bình thường lỡ thêm / chỉ là chuyện phiền: bạn sang máy kia, tạo lại dir, dồn mọi thứ vào. Nhưng khi kết hợp dấu / cuối với --delete thì nguy cơ thảm hoạ lớn hơn nhiều — bạn có thể xoá nhầm những tệp chẳng liên quan gì.1 Ông còn cảnh báo riêng về tính năng tự hoàn tất tên tệp của shell: nhiều shell tự gắn dấu gạch chéo vào tên thư mục sau khi bạn bấm TAB.1

  3. --delete

    Bản sao chính xác — và cái giá của nó Muốn giống hệt thì phải xoá bớt An exact replica — and what it costs

    Mặc định, rsync chép tệp và thư mục mà không đoái hoài tới nội dung sẵn có ở đích. Ward lấy ví dụ: chuyển thư mục d chứa a và b sang một máy vốn đã có d/c, thì sau khi xong đích sẽ có cả d/a, d/b lẫn d/c.1 Muốn một bản sao y hệt nguồn, bạn phải xoá những tệp ở đích mà nguồn không có — đó là việc của --delete.1

    Mặc định rsync chỉ thêm vào, không dọn đi. Muốn hai bên giống hệt nhau thì phải cho phép nó xoá — và đó là lúc phải thật cẩn thận. Nhớ nhé: trước khi cho phép xoá, chạy thử bằng -nv đã.

    By default rsync copies files and directories without considering what is already at the destination. Ward's example: transfer directory d containing a and b to a machine that already has d/c, and afterwards the destination holds d/a, d/b and d/c.1 To make an exact replica of the source you must delete destination files that do not exist in the source — that is what --delete does.1

    Cảnh báo của tác giảThe author's warning “Thao tác này có thể nguy hiểm” — hãy dành thời gian soi thư mục đích xem có gì bạn sẽ vô tình xoá. Nếu chưa chắc, chạy thử bằng -nv để biết chính xác khi nào rsync định xoá một tệp.1 Xoá là xoá thật. Thử trước đã. "This operation can be dangerous" — take the time to inspect the destination for anything you would inadvertently delete. If uncertain, do a dry run with -nv so you know exactly when rsync wants to delete a file.1

    Điều kiện mà man page thêm vào

    --delete xoá tệp thừa ở phía nhận “but only for the directories that are being synchronized”. Man page nhấn mạnh bạn phải yêu cầu rsync gửi cả thư mục (dir hoặc dir/), chứ không phải liệt kê tệp bằng ký tự đại diện (dir/*) — vì shell khai triển ký tự đại diện trước, nên rsync chỉ thấy các tệp riêng lẻ chứ không thấy thư mục cha.2

    Man page cũng đồng ý với cảnh báo

    “This option can be dangerous if used incorrectly! It is a very good idea to first try a run using the --dry-run (-n) option to see what files are going to be deleted.”2 Hai nguồn độc lập cùng nói một câu — đó là dấu hiệu nên nghe theo.

  4. --exclude

    Loại trừ — mẫu, không phải tên tệp Bỏ bớt vài thứ không muốn chép Excluding — a pattern, not a filename

    Muốn chuyển thư mục src sang host nhưng bỏ qua mọi thứ tên .git, bạn viết rsync -a --exclude=.git src host:. Ward nhấn mạnh: lệnh này loại trừ mọi tệp và thư mục tên .git, vì --exclude nhận một mẫu chứ không phải một tên tệp tuyệt đối. Muốn loại đúng một mục, hãy chỉ ra đường dẫn tuyệt đối bắt đầu bằng /: --exclude=/src/.git.1

    Bạn nói: “chép hết, trừ những thứ tên là .git”. Nhưng nhớ rằng nó sẽ bỏ tất cả chỗ nào tên như vậy, không phải chỉ một chỗ. Nhớ nhé: nói “trừ” là trừ khắp nơi.

    To transfer src to host while excluding anything named .git, you write rsync -a --exclude=.git src host:. Ward stresses that this excludes all files and directories named .git, because --exclude takes a pattern, not an absolute filename. To exclude one specific item, give an absolute path starting with /: --exclude=/src/.git.1

    Chú thích quan trọngThe note that matters Dấu / đầu tiên trong /src/.git không phải thư mục gốc của hệ thống, mà là thư mục cơ sở của lần chuyển.1 Dấu / ở đầu nghĩa là “tính từ chỗ bắt đầu chép”, không phải gốc máy. The first / in /src/.git is not your system's root directory but the base directory of the transfer.1

    Bốn mẹo còn lại của tác giả

    Bạn có thể dùng bao nhiêu tham số --exclude tuỳ thích; nếu lặp lại cùng một bộ mẫu, hãy đặt chúng vào một tệp văn bản thuần (mỗi dòng một mẫu) rồi dùng --exclude-from=file; để loại thư mục tên item nhưng vẫn giữ tệp cùng tên, thêm dấu gạch chéo cuối: --exclude=item/; và nếu mẫu của bạn quá chặt, dùng --include để đưa lại một tệp hay thư mục cụ thể.1

    Quy tắc khớp mẫu

    Ward viết rằng mẫu loại trừ dựa trên một thành phần tên tệp hoặc thư mục đầy đủ và có thể chứa glob đơn giản: t*s khớp this nhưng không khớp ethers.1 Man page phát biểu cùng luật chặt chẽ hơn: mẫu không chứa / (không kể dấu cuối) hay ** thì chỉ khớp thành phần cuối của đường dẫn; mẫu kết thúc bằng / chỉ khớp thư mục; mẫu bắt đầu bằng / được neo vào đầu đường dẫn của lần chuyển.2

  5. safeguards

    Kiểm chứng và lưới an toàn Mấy cái “phanh” của rsync Verification and safety nets

    Khi tệp hai bên không giống nhau, rsync gửi bản nguồn và ghi đè bản ở xa. Ward liệt kê những tuỳ chọn để thay hành vi mặc định đó: --checksum (viết tắt -c) tính tổng kiểm — “chữ ký gần như duy nhất” — để xem hai tệp có thật sự giống nhau không, tốn một ít I/O và CPU nhưng là bắt buộc với dữ liệu nhạy cảm hoặc các tệp hay trùng kích thước; --ignore-existing không đụng tới tệp đã có ở đích; --backup (-b) đổi tên tệp cũ bằng cách thêm hậu tố ~ trước khi ghi bản mới; --suffix=s đổi hậu tố ấy; và --update (-u) không ghi đè tệp ở đích nếu nó mới hơn tệp nguồn.1

    rsync có mấy cái phanh: “so kỹ hơn rồi hãy chép”, “đã có rồi thì đừng đụng”, “giữ lại bản cũ trước khi đè”, “bản ở kia mới hơn thì để yên”. Nhớ nhé: phanh có sẵn, chỉ cần nhớ đạp.

    When the source files differ from the destination files, rsync transfers the source and overwrites what is there. Ward lists the options that change that default: --checksum (abbreviated -c) computes checksums — "mostly unique signatures" — to see whether files really are the same, costing a little I/O and CPU but a must for sensitive data or files of uniform size; --ignore-existing doesn't clobber files already on the target; --backup (-b) renames existing files by adding a ~ suffix before transferring the new ones; --suffix=s changes that suffix; and --update (-u) doesn't clobber any target file with a later date than its source counterpart.1

    Quy trình hai bước của tác giảThe author's two-step routine Lần đầu chạy rsync -n để xác nhận không tệp nào có sẵn ở đích. Chạy xong lần thật rồi, chạy lại với rsync -v: lần này danh sách chuyển phải trống, vì cả hai bên đã có cùng bộ tệp với cùng ngày sửa.1 Chạy thử → chạy thật → chạy lại lần nữa để xem có im lặng không. Im lặng là đúng. First run rsync -n to verify nothing already exists at the destination. After the real run, run it again with rsync -v: this time no files should appear in the transfer list, because the file set exists on both ends with the same modification dates.1

    Mức độ ồn ào

    Không có tuỳ chọn đặc biệt, rsync chạy im lặng, chỉ lên tiếng khi có vấn đề. -v bật chế độ chi tiết, -vv chi tiết hơn — Ward nói bạn có thể gắn bao nhiêu chữ v tuỳ thích, nhưng hai chữ đã là nhiều hơn mức cần. Muốn bản tổng kết đầy đủ sau khi chuyển, dùng rsync --stats.1 Man page mô tả cùng thang đó: một -v cho biết tệp nào đang được chuyển kèm tóm tắt ngắn ở cuối; hai -v cho biết tệp nào bị bỏ qua; “More than two -v options should only be used if you are debugging rsync.”2

    -c làm gì cho đúng

    Man page nói rõ: thay vì phép kiểm nhanh theo kích thước và thời gian, -c so tổng kiểm cho mỗi tệp có kích thước khớp — nghĩa là cả hai phía phải đọc toàn bộ dữ liệu, nên có thể chậm đi đáng kể.2 Đúng như Ward tóm tắt, đây là lựa chọn “trả giá để chắc chắn”.

  6. -z / --bwlimit

    Nén và giới hạn băng thông — hai con dao hai lưỡi Nén lại, và đi chậm lại Compression and bandwidth limiting — two double-edged options

    Nhiều người thích dùng -z kèm -a để nén dữ liệu trước khi truyền: rsync -az dir host:dest_dir. Ward cân nhắc rất sòng phẳng: nén cải thiện hiệu năng trong vài tình huống — khi tải lên lượng lớn dữ liệu qua kết nối chậm, hoặc khi độ trễ giữa hai máy cao — nhưng trên mạng cục bộ nhanh, hai đầu có thể bị nghẽn ở chính thời gian CPU dùng để nén và giải nén, nên truyền không nén lại nhanh hơn.1

    Nén giống như xếp đồ cho gọn trước khi gửi: đường xa thì đáng, đường gần thì mất công xếp lâu hơn cả đi. Còn --bwlimit là bảo nó “đi chậm thôi” để mạng nhà vẫn còn chỗ cho việc khác. Nhớ nhé: nén khi đường chậm, nhường đường khi mình còn cần mạng.

    Many users like -z alongside -a to compress data before transmission: rsync -az dir host:dest_dir. Ward weighs it honestly: compression helps in certain situations — uploading a lot of data across a slow connection, or when latency between the two hosts is high — but across a fast local network the two endpoints can be constrained by the CPU time spent compressing and decompressing, so an uncompressed transfer may be faster.1

    Vì sao phải hãm băng thôngWhy throttle at all Tải lên nhiều dữ liệu rất dễ làm nghẽn đường lên. Dù bạn không dùng tới đường xuống (thường rộng hơn), kết nối vẫn có vẻ chậm, vì các gói TCP đi ra như yêu cầu HTTP phải tranh băng thông đường lên với lần truyền của bạn.1 Ward ví dụ rsync --bwlimit=100000 -a dir host:dest_dir để giới hạn ở 100.000 Kbps.1 Khi máy bạn đang gửi hết sức, mọi thứ khác trên mạng đều chậm theo. Bảo nó gửi chậm lại là mọi người dễ thở. Uploading a large amount of data easily clogs your uplink. Even without using your (usually larger) downlink, the connection still feels slow, because outgoing TCP packets such as HTTP requests compete with your transfer for uplink bandwidth.1 Ward's example, rsync --bwlimit=100000 -a dir host:dest_dir, limits it to 100,000 Kbps.1

    Đơn vị của --bwlimit

    Man page mô tả --bwlimit=RATE là tốc độ truyền tối đa qua socket, tính theo đơn vị mỗi giây; nếu không ghi hậu tố, giá trị được hiểu là đơn vị 1024 byte (như thể đã thêm “K” hoặc “KiB”), và 0 nghĩa là không giới hạn.2 Đây là một chỗ hai nguồn dùng đơn vị khác nhau: Ward viết “giới hạn băng thông ở 100.000 Kbps”1 trong khi man page hiểu một con số trần là đơn vị 1024 byte mỗi giây.2 Theo cách hiểu của man page, --bwlimit=100000 tương đương xấp xỉ 97,7 MiB/s. Trang này giữ nguyên con số và cách gọi của sách trong phần chính, và ghi chú sự khác biệt ở đây thay vì lặng lẽ sửa.

    Chiều ngược lại

    rsync không chỉ để đẩy đi. Đặt máy và đường dẫn nguồn ở xa làm tham số đầu tiên là bạn kéo về: rsync -a host:src_dir dest_dir.1 Và như Ward nhắc lại, bỏ host: ở cả hai tham số thì rsync nhân bản thư mục ngay trên máy bạn.1

Cụm khái niệm 02 Concept cluster 02

Chia sẻ thật sự: hiệu năng, bảo mật, và Samba Dùng chung thư mục, và nói chuyện với máy Windows True sharing: performance, security, and Samba

Ward đặt hai câu hỏi trước khi đưa công cụ. Thứ nhất là vì sao: trong các mạng Unix truyền thống có hai lý do lớn — tiện lợi và thiếu lưu trữ cục bộ; gom lưu trữ về vài máy chủ trung tâm rẻ hơn nhiều so với mua và bảo trì ổ đĩa cho từng máy.1 Thứ hai là cái giá: ưu thế của mô hình đó bị che lấp bởi một nhược điểm lớn không đổi qua năm tháng — hiệu năng lưu trữ qua mạng thường kém so với lưu trữ cục bộ.1

Trước khi dùng chung thư mục, hãy tự hỏi: mình cần gì? Nếu chỉ xem phim, nghe nhạc thì mạng chịu được. Nếu sửa video hay lập trình dự án lớn thì để tệp ngay trên máy mình. Nhớ nhé: dữ liệu to mà đọc tuần tự thì qua mạng được; đọc lắt nhắt nhiều tệp thì không.

Ward asks two questions before handing over any tool. First, why: traditional Unix networks had two major reasons — convenience and lack of local storage; concentrating storage on a few central servers was far more economical than buying and maintaining local storage for every machine.1 Second, the cost: that model's advantages are overshadowed by one disadvantage constant over the years — network storage performance is often poor compared to local storage.1

Thủ phạm mang tên độ trễ. Ward tách bạch hai kiểu truy cập. Phát video và âm thanh từ máy chủ tới trình phát thì phần cứng và mạng hiện đại không gặp vấn đề, một phần vì mẫu truy cập rất dễ đoán: máy chủ biết máy khách sẽ đọc tuần tự nên nạp trước và đệm hiệu quả. Nhưng khi bạn thao tác phức tạp hơn hoặc chạm vào nhiều tệp khác nhau cùng lúc, CPU của bạn sẽ ngồi chờ mạng nhiều hơn là làm việc. Độ trễ — thời gian nhận dữ liệu cho một lần truy cập tệp bất kỳ — là một trong những thủ phạm chính: trước khi gửi được byte nào, máy chủ phải nhận và giải mã yêu cầu, rồi định vị và nạp dữ liệu; các bước đầu thường chậm nhất, và chúng lặp lại gần như với mọi lần mở tệp mới.1

Định nghĩa. Samba là bộ phần mềm chia sẻ tệp chuẩn cho Unix, nói giao thức mạng chuẩn của Windows: Server Message Block (SMB).1 Nó chạy cả hai chiều — máy Windows trong mạng tới được hệ thống Linux của bạn, và bạn cũng in ấn cùng truy cập tệp trên máy chủ Windows từ máy Linux thông qua phần mềm máy khách của Samba.1 macOS cũng hỗ trợ chia sẻ tệp SMB, nhưng với macOS bạn còn có thể dùng SSHFS.1

Nói đơn giản. Samba là “người phiên dịch” giữa Linux và Windows về chuyện chia sẻ thư mục và máy in. Nhờ nó, máy Windows nhìn thấy thư mục trên máy Linux như một ổ đĩa mạng bình thường. Nhớ nhé: Samba = Linux nói được tiếng Windows.

Definition. Samba is the standard file sharing software suite for Unix, speaking the standard Windows network protocol: Server Message Block (SMB).1 It works both ways — your network's Windows computers reach your Linux system, and you can print to and access files on Windows servers from your Linux machine via Samba's client software.1 macOS supports SMB file sharing too, but there you can also use SSHFS.1

1 · tạo smb.conf
2 · thêm mục chia sẻ tệp
3 · thêm mục chia sẻ máy in
4 · chạy nmbd và smbd

viết một tệp cấu hình
khai thư mục dùng chung
khai máy in dùng chung
bật hai dịch vụ lên

1 · create smb.conf
2 · add file sharing sections
3 · add printer sharing sections
4 · start nmbd and smbd

  1. smb.conf

    smb.conf — bốn bước và một tệp duy nhất Một tệp cấu hình cho tất cả smb.conf — four steps and one file

    Ward gói việc dựng máy chủ Samba vào bốn bước: tạo tệp smb.conf; thêm các mục chia sẻ tệp; thêm các mục chia sẻ máy in; rồi khởi động hai tiến trình nền nmbd và smbd.1 Khi bạn cài Samba từ gói của bản phân phối, hệ thống thường tự làm các bước đó với mặc định hợp lý — nhưng nó không thể đoán bạn muốn chia sẻ đúng những tài nguyên nào.1 Tệp smb.conf thường nằm trong một thư mục etc như /etc/samba, nhưng có khi phải tìm quanh vì nó cũng có thể ở một thư mục lib như /usr/local/samba/lib.1

    Muốn chia sẻ, bạn viết một tệp nhỏ nói rõ: tên máy là gì, thư mục nào được dùng chung, ai được vào. Rồi bật dịch vụ lên. Nhớ nhé: một tệp cấu hình, bốn bước, thế là xong phần khung.

    Ward packs setting up a Samba server into four steps: create an smb.conf file; add file sharing sections; add printer sharing sections; then start the Samba daemons nmbd and smbd.1 When you install Samba from a distribution package, your system usually performs those steps with reasonable defaults — but it cannot determine which particular shares you want to offer.1 The file usually lives in an etc directory such as /etc/samba, though you may have to hunt for it, as it can also sit in a lib directory such as /usr/local/samba/lib.1

    Định dạng bạn đã gặpA format you have met Ward nhận xét định dạng smb.conf giống kiểu XDG bạn từng thấy ở nơi khác (chẳng hạn định dạng cấu hình của systemd), chia thành nhiều mục đặt trong dấu ngoặc vuông như [global] và [printers].1 Tệp này chia thành từng khối, mỗi khối có tên trong ngoặc vuông — giống các tệp cấu hình khác bạn đã thấy. Ward notes that the smb.conf format resembles the XDG style you've seen elsewhere (such as systemd's configuration format), breaking into sections denoted with square brackets like [global] and [printers].1

    Ba tham số của [global]

    Ward giải thích: netbios name là tên máy chủ — nếu bỏ qua, Samba dùng tên host Unix; server string là mô tả ngắn, mặc định là số hiệu phiên bản Samba; workgroup là tên nhóm làm việc Windows, và nếu bạn ở trong một miền Windows thì đặt nó thành tên miền.1 Trang smb.conf(5) xác nhận cả ba: mặc định của netbios name là thành phần đầu của tên DNS của máy (tối đa 15 ký tự), mặc định của server string là Samba %v với %v được thay bằng số hiệu phiên bản, và workgroup mặc định là WORKGROUP.3

    Phạm vi mà tác giả tự giới hạn

    Ward nói thẳng rằng phần Samba trong chương “không nhằm bao quát toàn diện”: nó giới hạn ở việc để các máy Windows trong cùng một mạng con nhìn thấy một máy Linux độc lập qua trình duyệt Network Places. Có vô số cách cấu hình Samba vì có rất nhiều khả năng về kiểm soát truy cập và tô-pô mạng; với chi tiết cho máy chủ quy mô lớn, ông giới thiệu Using Samba, ấn bản thứ 3 của Gerald Carter, Jay Ts và Robert Eckstein (O'Reilly, 2007) và trang web Samba.1

  2. access control

    Kiểm soát truy cập — ai vào được, từ đâu Ai được vào và vào từ chỗ nào Access control — who gets in, and from where

    Ward liệt kê vài tuỳ chọn đặt trong [global] hoặc trong từng mục chia sẻ. interfaces khiến Samba chỉ lắng nghe trên những mạng hay giao diện được nêu, ví dụ interfaces = 10.23.2.0/255.255.255.0 hay interfaces = enp0s31f6. bind interfaces only = yes đi kèm với interfaces để giới hạn truy cập vào đúng những máy bạn với tới trực tiếp trên các giao diện đó. valid users = jruser, bill cho phép đúng những người được nêu. guest ok đặt là true sẽ mở mục chia sẻ cho người dùng ẩn danh trên mạng — chỉ làm khi bạn chắc chắn mạng là riêng tư.1

    Bạn có thể nói: chỉ nghe ở cửa này thôi; chỉ mấy người này được vào; hoặc ai cũng vào được (chỉ làm khi mạng là mạng nhà mình). Nhớ nhé: mở cửa cho khách lạ thì phải chắc mình đang ở trong sân nhà.

    Ward lists a few options for [global] or for individual shares. interfaces makes Samba listen only on the given networks or interfaces, e.g. interfaces = 10.23.2.0/255.255.255.0 or interfaces = enp0s31f6. bind interfaces only = yes accompanies interfaces to limit access to only the machines you can directly reach on those interfaces. valid users = jruser, bill allows the given users. guest ok set to true makes a share available to anonymous users on the network — do this only if you are sure the network is private.1

    Ẩn không phải là khoáHidden is not locked browseable quyết định mục chia sẻ có hiện ra với trình duyệt mạng hay không. Đặt no cho một mục thì bạn vẫn truy cập được nó trên máy chủ Samba — chỉ là phải biết đúng tên.1 Đặt “không hiện” chỉ là giấu đi, không phải khoá lại. Ai biết tên vẫn vào được. browseable controls whether a share is visible to network browsers. Set it to no and you can still access the share on the Samba server — you just need to know its exact name.1

    Trang man xác nhận từng tham số

    smb.conf(5) mô tả bind interfaces only đúng như Ward: nó cho quản trị viên “giới hạn những giao diện nào trên máy sẽ phục vụ yêu cầu SMB”, ảnh hưởng tới smbd và nmbd theo cách hơi khác nhau, mặc định là no.3 browseable điều khiển “việc mục chia sẻ này có được thấy trong danh sách các mục khả dụng ở net view và trong danh sách duyệt hay không”, mặc định yes.3 guest ok khi đặt yes nghĩa là “không cần mật khẩu để kết nối tới dịch vụ”, và đặc quyền sẽ là của tài khoản khách, mặc định no.3

    Một sắc thái nhỏ của valid users

    Ward tóm tắt tham số này là “cho phép những người được nêu truy cập”. Trang man mô tả cùng cơ chế nhưng gọi nó là “một phép kiểm tra rất cẩn trọng để tuyệt đối chắc chắn một thiết lập sai không chọc thủng bảo mật của bạn”, và bổ sung cú pháp nhóm: tên bắt đầu bằng @ được hiểu là nhóm NIS rồi tới nhóm UNIX, + chỉ tra cơ sở dữ liệu nhóm UNIX, & chỉ tra NIS.3

  3. tdbsam

    Mật khẩu — hai hệ thống không nói chuyện được với nhau Mật khẩu Windows và mật khẩu Linux là hai thứ Passwords — two systems that don't speak to each other

    Ward khuyên chỉ cho phép truy cập máy chủ Samba kèm xác thực mật khẩu. Vấn đề: hệ mật khẩu cơ bản trên Unix khác hệ trên Windows, nên trừ khi bạn dùng mật khẩu mạng dạng văn bản rõ hoặc xác thực qua máy chủ miền Windows, bạn phải dựng một hệ mật khẩu thay thế.1 Ông chỉ cách dùng Trivial Database (TDB) của Samba — phù hợp cho mạng nhỏ — với bốn dòng trong [global]: security = user, passdb backend = tdbsam, obey pam restrictions = yes, smb passwd file = /etc/samba/passwd_smb.1

    Máy Linux giữ mật khẩu theo kiểu của nó; Windows giữ theo kiểu khác. Muốn hai bên hiểu nhau, Samba phải giữ một sổ mật khẩu riêng. Nhớ nhé: mật khẩu Samba là một sổ riêng, không phải sổ đăng nhập Linux.

    Ward advises allowing access to your Samba server only with password authentication. The catch: Unix's basic password system differs from Windows', so unless you specify cleartext network passwords or authenticate against a Windows domain server, you must set up an alternative password system.1 He shows Samba's Trivial Database (TDB) backend — appropriate for small networks — with four lines in [global]: security = user, passdb backend = tdbsam, obey pam restrictions = yes, smb passwd file = /etc/samba/passwd_smb.1

    Cái bẫy được tác giả nêu đích danhThe trap the author names Nếu thấy dòng unix password sync = yes trong smb.conf, hãy cẩn thận: nó khiến smbpasswd đổi luôn mật khẩu Linux thường của người dùng. Kết quả rất dễ gây rối — người dùng đổi mật khẩu Samba thành một thứ khác mật khẩu Linux rồi phát hiện mình không đăng nhập vào hệ thống Linux được nữa. Ward lưu ý một số bản phân phối đặt tham số này theo mặc định trong gói máy chủ Samba của họ.1 Có một dòng cấu hình khiến đổi mật khẩu Samba là đổi luôn mật khẩu đăng nhập máy. Nhiều bản Linux bật sẵn dòng đó. Kiểm tra trước khi đổi. If you see unix password sync = yes in smb.conf, be careful: it makes smbpasswd change the user's normal Linux password too. The result is very confusing — a user changes their Samba password to something that is not their Linux password and finds they can no longer log in to their Linux system. Ward notes some distributions set this parameter by default in their Samba server packages.1

    Thêm, xoá, tạm khoá người dùng

    Ward: thêm bằng smbpasswd -a username, và tên ấy phải là một tên người dùng hợp lệ trên hệ thống Linux của bạn; xoá bằng -x; tạm vô hiệu hoá bằng -d và bật lại bằng -e.1 Trang smbpasswd(8) khớp từng điểm: -d ghi cờ D vào vùng kiểm soát tài khoản, sau đó “mọi nỗ lực xác thực qua SMB bằng tên người dùng này sẽ thất bại”; -e không có tác dụng nếu tài khoản vốn chưa bị vô hiệu; và các phần hậu cảnh mặc định yêu cầu người dùng đã tồn tại trong tệp mật khẩu hệ thống (thường là /etc/passwd).4

    Ai đổi được mật khẩu của ai

    Với quyền siêu người dùng, smbpasswd username đổi mật khẩu của người đó; nhưng nếu máy chủ Samba đang chạy, bất kỳ người dùng nào cũng đổi được mật khẩu Samba của chính mình bằng cách gõ smbpasswd trơ trọi.1 Trang man giải thích tại sao việc chạy máy chủ lại là điều kiện: công cụ hoạt động theo kiểu máy khách – máy chủ chứ không phải setuid, nên “the smbd daemon must be running on the local machine”.4

    Vì sao có obey pam restrictions

    Ward giải thích tham số này bảo đảm người dùng đổi mật khẩu bằng smbpasswd phải tuân mọi quy tắc mà PAM áp cho việc đổi mật khẩu thường.1 Trang man bổ sung sắc thái quan trọng: mặc định là no, và Samba luôn bỏ qua PAM cho khâu xác thực khi bật mã hoá mật khẩu, vì các mô-đun PAM không hỗ trợ được cơ chế thách thức – đáp ứng.3 Nói cách khác, tham số này chi phối khâu quản lý tài khoản và phiên, không phải khâu xác thực.

  4. nmbd / smbd

    Hai tiến trình nền — một đặt tên, một làm việc Hai dịch vụ: một gọi tên, một phục vụ Two daemons — one names, one works

    Nếu cài Samba từ gói của bản phân phối, thường bạn không phải lo chuyện khởi động — Ward khuyên kiểm tra bằng danh sách từ systemctl --type=service. Nhưng nếu cài từ mã nguồn, chạy nmbd -D -s smb_config_file và smbd -D -s smb_config_file. nmbd là máy chủ tên NetBIOS, còn smbd làm công việc thật sự là xử lý các yêu cầu chia sẻ; -D chỉ định chế độ tiến trình nền.1

    Một dịch vụ lo việc “máy tôi tên gì để bên kia tìm thấy”, dịch vụ kia lo việc “đưa tệp cho bên kia”. Thường thì hệ thống tự bật cả hai. Nhớ nhé: một cái để được gọi tên, một cái để làm việc.

    If you installed Samba from a distribution package you usually needn't worry about starting it — Ward suggests checking the list from systemctl --type=service. But if you built from source, run nmbd -D -s smb_config_file and smbd -D -s smb_config_file. nmbd is a NetBIOS name server, while smbd does the actual work of handling share requests; -D specifies daemon mode.1

    Khi bạn sửa cấu hìnhWhen you edit the config Nếu sửa smb.conf trong lúc smbd đang chạy, bạn báo cho tiến trình nền biết bằng tín hiệu HUP — “dù gần như luôn tốt hơn nếu để systemd giám sát máy chủ”, khi đó systemctl làm hộ bạn.1 Sửa xong thì phải báo cho dịch vụ biết. Cách gọn nhất là để systemd lo. If you alter smb.conf while smbd is running, notify the daemon with a HUP signal — "though it's almost always for the better if you let systemd supervise the server," in which case systemctl does the work.1

    Trang man của hai tiến trình

    nmbd(8) tự mô tả là “NetBIOS name server to provide NetBIOS over IP naming services to clients”, và -D|--daemon khiến nó tách ra chạy nền, nhận yêu cầu ở cổng thích hợp.5 smbd(8) là “server to provide SMB/CIFS services to clients”, cung cấp dịch vụ tệp và máy in cho máy khách Windows.8

    HUP làm gì ở mỗi bên

    Với smbd, tài liệu cho biết tệp cấu hình và các tệp nó include được tự nạp lại mỗi ba phút nếu có thay đổi, và “One can force a reload by sending a SIGHUP to the server” — nạp lại không ảnh hưởng tới các kết nối đã thiết lập.8 Với nmbd, SIGHUP khiến nó đổ danh sách tên ra tệp namelist.debug và cũng nạp lại cấu hình; tài liệu khuyên dùng SIGTERM để dừng, không dùng SIGKILL.5

    Khi có trục trặc

    Ward: lỗi lúc khởi động hiện ngay trên dòng lệnh, nhưng các thông điệp chẩn đoán lúc chạy đi vào hai tệp nhật ký log.nmbd và log.smbd, thường nằm trong một thư mục /var/log như /var/log/samba; ở đó bạn còn thấy nhật ký riêng cho từng máy khách.1

  5. [share] / [homes] / [printers]

    Khai một mục chia sẻ — tệp, thư mục nhà, máy in Khai thư mục dùng chung và máy in Declaring a share — files, home directories, printers

    Để xuất một thư mục cho máy khách SMB, Ward thêm một mục dạng [label] với path, comment, guest ok = no, writable = yes, printable = no.1 Ông giải nghĩa từng tham số: guest ok = yes cho phép khách vào (public là từ đồng nghĩa); writable = yes hay true đánh dấu mục chia sẻ là đọc-ghi — và đừng cho khách truy cập một mục đọc-ghi; printable hiển nhiên phải là no hoặc false với một mục chia sẻ thư mục; veto files chặn xuất mọi tệp khớp mẫu đã cho, mỗi mẫu phải đặt giữa hai dấu gạch chéo, ví dụ veto files = /*.o/bin/ cấm tệp đối tượng cùng mọi tệp hay thư mục tên bin.1

    Bạn khai: thư mục này tên gì khi nhìn từ máy khác, nằm ở đâu, ai được ghi vào. Rồi bạn có thể nói thêm “giấu mấy tệp kiểu này đi”. Nhớ nhé: cho phép ghi thì đừng cho phép khách lạ.

    To export a directory to SMB clients, Ward adds a [label] section with path, comment, guest ok = no, writable = yes, printable = no.1 He glosses each: guest ok = yes allows guest access (public is a synonym); writable = yes or true marks the share read-write — and do not allow guest access to a read-write share; printable obviously must be no or false on a directory share; veto files prevents the export of any files matching the given patterns, each enclosed between forward slashes, e.g. veto files = /*.o/bin/ bars object files as well as anything named bin.1

    Thư mục nhà và phép thế %SHome directories and the %S substitution Mục [homes] xuất thư mục nhà cho người dùng; mặc định Samba đọc mục /etc/passwd của người đang đăng nhập để xác định thư mục nhà. Muốn đặt thư mục nhà Windows ở chỗ khác thư mục nhà Linux, dùng phép thế %S trong tham số path — chẳng hạn path = /u/%S chuyển thư mục [homes] của người dùng sang /u/user; Samba thay %S bằng tên người dùng hiện tại.1 Có một khối đặc biệt tên [homes] để mỗi người tự thấy thư mục riêng của mình, không phải khai từng người một. The [homes] section exports home directories to users; by default Samba reads the logged-in user's /etc/passwd entry to determine their home directory. To keep Windows home directories somewhere other than the regular Linux ones, use the %S substitution in path — e.g. path = /u/%S switches a user's [homes] directory to /u/user; Samba substitutes the current username for %S.1

    Chia sẻ máy in

    Ward xuất máy in bằng một mục [printers]; với CUPS — hệ in chuẩn của Unix — nó gồm comment, browseable = yes, printing = CUPS, path = cups, printable = yes, writable = no. Để dùng được printing = CUPS, bản cài Samba của bạn phải được cấu hình và liên kết với thư viện CUPS.1 Trang man liệt kê CUPS trong số các kiểu in được hỗ trợ và nhắc rằng CUPS cùng IPRINT chỉ khả dụng nếu thư viện phát triển CUPS có mặt lúc biên dịch hoặc đóng gói Samba — khớp đúng với điều kiện Ward nêu.3

    Một lối tắt hợp lý cho máy in

    Ward ghi chú: tuỳ cấu hình, bạn có thể muốn cho khách truy cập máy in bằng guest ok = yes thay vì phát mật khẩu hay tài khoản Samba cho mọi người cần in; và chẳng hạn rất dễ giới hạn quyền in trong một mạng con bằng luật tường lửa.1

    Sắc thái của printable và veto files

    Trang man nói printable = yes nghĩa là máy khách “có thể mở, ghi vào và nộp tệp cuộn in trong thư mục được chỉ định cho dịch vụ”, mặc định là no; và veto files là “danh sách tệp và thư mục vừa không nhìn thấy vừa không truy cập được”, mỗi mục ngăn bằng /, dùng được * và ?.3 Lưu ý writable trong tài liệu hiện tại là “từ đồng nghĩa đảo” của read only.3

  6. smbclient / CIFS

    Chiều ngược lại — từ Linux nhìn sang Windows Từ máy Linux mở thư mục của máy Windows The other direction — Linux looking at Windows

    Chương trình máy khách smbclient in ấn và truy cập được các mục chia sẻ Windows ở xa — tiện khi bạn ở trong môi trường buộc phải làm việc với máy chủ Windows không có cách giao tiếp thân thiện với Unix.1 Bắt đầu bằng -L để lấy danh sách mục chia sẻ từ một máy chủ: smbclient -L -U username SERVER; bỏ -U username được nếu tên người dùng Linux của bạn trùng tên trên SERVER. Sau đó nó hỏi mật khẩu; bấm ENTER để thử vào với tư cách khách.1

    Bạn có thể hỏi máy Windows: “cho tôi xem bạn đang chia sẻ những gì”. Rồi bạn mở một cái ra, và gõ lệnh để lấy tệp về hoặc đẩy tệp sang. Nhớ nhé: hỏi danh sách trước, rồi mới mở một mục.

    The smbclient client program can print to and access remote Windows shares — handy in an environment where you must interact with Windows servers that offer no Unix-friendly means of communication.1 Start with -L to list a remote server's shares: smbclient -L -U username SERVER; drop -U username if your Linux username matches your username on SERVER. It then asks for a password; press ENTER to try accessing as a guest.1

    Đọc cột TypeRead the Type column Danh sách trả về có cột Type. Ward dặn chỉ để ý các mục Disk và Printer — các mục IPC là để quản trị từ xa. Dùng tên ở cột Sharename để truy cập từng mục.1 Trong danh sách, chỉ quan tâm hai loại: ổ đĩa và máy in. The returned list has a Type field. Ward says to pay attention only to the Disk and Printer shares — the IPC ones are for remote management. Use the name in the Sharename column to access each share.1

    Chế độ giống ftp

    Với truy cập thông thường vào một mục chia sẻ đĩa, dùng smbclient -U username '\\SERVER\sharename'; thành công thì bạn nhận dấu nhắc smb: \>. Ward nói ở chế độ truyền tệp này smbclient giống ftp của Unix, với các lệnh get file, put file, cd dir, lcd localdir, pwd, !command (chạy lệnh trên máy cục bộ — đặc biệt tiện là !pwd và !ls) và help.1 Trang smbclient(1) tự mô tả đúng là “ftp-like client to access SMB/CIFS resources on servers” và xác nhận get, put, cd, lcd, !, help.9

    Gắn hẳn vào cây thư mục

    Muốn truy cập tiện hơn, bạn gắn thẳng mục chia sẻ vào hệ thống bằng mount. Ward lưu ý cú pháp khác thường — dùng SERVER:sharename chứ không phải dạng \\SERVER\sharename quen thuộc: mount -t cifs SERVER:sharename mountpoint -o user=username,pass=password. Để mount làm được việc này, máy bạn phải cài bộ tiện ích Common Internet File System (CIFS), thường là một gói riêng trong các bản phân phối.1

    Điều trang man nói thêm

    mount.cifs(8) xác nhận công cụ này “là một phần của bộ cifs-utils”, và mô tả dịch vụ theo cú pháp UNC //server/share. Nó cũng khuyên viết đủ username= thay vì user=, vì user= “có thể làm chương trình mount tiêu chuẩn nhầm rằng đây là một lần mount không phải của siêu người dùng”, và cảnh báo mật khẩu chứa dấu phẩy sẽ không được phân tích đúng trên dòng lệnh.10 Đây là chỗ thực hành đi hơi xa khỏi chữ trong sách — trang này ghi cả hai.

Cụm khái niệm 03 Concept cluster 03

SSHFS, NFS và lưu trữ đám mây — ba nấc của cùng một thoả hiệp Máy Linux với nhau, ổ NAS, và ổ trên mây SSHFS, NFS and cloud storage — three notches of one trade-off

Rời khỏi thế giới Windows, Ward xếp ba lựa chọn theo mức công sức bỏ ra. SSHFS cho những tình huống không phức tạp lắm — “không gì khác hơn một hệ tệp không gian người dùng mở một kết nối SSH và trình bày các tệp ở đầu kia tại một điểm gắn trên máy bạn”.1 NFS là một trong những hệ chia sẻ tệp truyền thống được dùng nhiều nhất giữa các hệ thống Unix, với rất nhiều phiên bản cho nhiều kịch bản.1 Còn lưu trữ đám mây là một hướng khác hẳn, gần như luôn được hiện thực dưới dạng giao diện FUSE.1

Ba cách: một cách dễ cài nhưng chậm (SSHFS), một cách nhanh hơn nhưng phải dựng máy chủ (NFS), và một cách thuê người khác giữ giùm (đám mây). Nhớ nhé: dễ, nhanh, khỏi lo — chọn hai trong ba thôi.

Leaving the Windows world, Ward ranks three options by the effort they demand. SSHFS for scenarios that aren't particularly complicated — "nothing more than a user-space filesystem that opens an SSH connection and presents the files on the other side at a mount point on your machine".1 NFS is one of the most commonly used traditional systems for file sharing among Unix systems, with many versions for different scenarios.1 And cloud storage is a different direction altogether, nearly always implemented as a FUSE interface.1

Về số phiên bản NFS. Ward không chốt một con số — ông chỉ nói “có nhiều phiên bản NFS khác nhau cho các kịch bản khác nhau”, rằng NFS phục vụ được trên cả TCP và UDP, với rất nhiều tuỳ chọn xác thực và mã hoá mà “rất ít trong số đó được bật theo mặc định, đáng tiếc thay”.1 Trang nfs(5) thì cụ thể hơn: máy khách Linux có thể hỗ trợ các phiên bản 3, 4.0, 4.1 hoặc 4.2 tuỳ tuỳ chọn biên dịch nhân; nếu không yêu cầu phiên bản nào, máy khách thử 4.2 trước rồi thương lượng lùi dần cho tới khi gặp phiên bản máy chủ hỗ trợ.13 Trang này giữ cách nói mở của Ward trong phần chính và ghi con số cụ thể ở đây, thay vì lặng lẽ chọn một bên.

Định nghĩa. FUSE — File System in User Space — là cách hiện thực một hệ tệp mà dữ liệu và siêu dữ liệu do một tiến trình người dùng bình thường cung cấp, nhưng vẫn truy cập được bình thường qua giao diện của nhân.16 Ward diễn đạt gọn hơn: một bộ xử lý FUSE “không gì khác hơn một tiến trình nền không gian người dùng đóng vai trung gian giữa nguồn dữ liệu và nhân”.1

Nói đơn giản. Bình thường, muốn thêm một loại ổ đĩa mới thì phải sửa nhân — việc rất khó. FUSE cho phép viết nó như một chương trình thường. Nhờ vậy mới có “ổ đĩa Dropbox”, “ổ đĩa S3”… Nhớ nhé: FUSE là cách làm ổ đĩa giả mà không phải động vào nhân.

Definition. FUSE — File System in User Space — is a way to implement a filesystem whose data and metadata are provided by an ordinary userspace process, yet which is accessed normally through the kernel interface.16 Ward puts it more compactly: a FUSE handler is "nothing more than a user-space daemon that acts as an intermediary between the data source and the kernel".1

sshfs username@host:dir mountpoint
fusermount -u mountpoint

mount -t nfs server:directory mountpoint

sshfs máy:thư-mục điểm-gắn
fusermount -u điểm-gắn

mount -t nfs máy:thư-mục điểm-gắn

sshfs username@host:dir mountpoint
fusermount -u mountpoint

mount -t nfs server:directory mountpoint

  1. sshfs

    SSHFS — nếu mở được SSH thì gắn được thư mục SSHFS — có SSH là có ổ đĩa mạng SSHFS — if you can open SSH, you can mount

    Cú pháp SSHFS trên dòng lệnh nhìn bề ngoài giống các lệnh SSH bạn đã gặp; bạn cung cấp thư mục chia sẻ ở máy xa và điểm gắn mong muốn: sshfs username@host:dir mountpoint. Như với SSH, bỏ được username@ nếu tên người dùng hai bên trùng nhau, và bỏ được :dir nếu bạn chỉ muốn gắn thư mục nhà ở đầu kia.1 Hầu hết bản phân phối không cài sẵn SSHFS, nên bạn có thể phải cài gói của bản phân phối.1

    Nếu bạn đã đăng nhập được vào máy kia bằng SSH thì bạn cũng gắn được thư mục của nó vào máy mình, như cắm một cái USB. Không cần cài gì ở máy kia. Nhớ nhé: có SSH là có ổ đĩa mạng, gần như miễn phí công sức.

    SSHFS's command line looks superficially like the SSH commands you've seen; you supply the shared directory on the remote host and the desired mount point: sshfs username@host:dir mountpoint. As in SSH, you can drop username@ if the username is the same on both sides, and omit :dir if you just want the home directory on the other side.1 Most distributions don't install SSHFS by default, so you may need your distribution's package.1

    Tháo gắn đúng cáchUnmounting properly Vì đây là hệ tệp không gian người dùng, nếu chạy với tư cách người dùng thường thì bạn phải tháo bằng fusermount -u mountpoint. Siêu người dùng cũng tháo được bằng umount; nhưng để bảo đảm nhất quán về quyền sở hữu và bảo mật, loại hệ tệp này thường nên được gắn với tư cách người dùng thường.1 Gắn bằng tài khoản nào thì tháo bằng tài khoản đó, và dùng đúng lệnh tháo dành cho nó. Because this is a user-space filesystem, running as a regular user you unmount with fusermount -u mountpoint. The superuser can also unmount with umount; but to ensure consistency of ownership and security, this type of filesystem is usually best mounted as a regular user.1

    Hai ưu, hai nhược

    Ward cân đối rất gọn. Ưu: thiết lập tối thiểu — yêu cầu duy nhất ở máy xa là SFTP được bật, và hầu hết máy chủ SSH bật sẵn; và nó không phụ thuộc vào bất kỳ cấu hình mạng cụ thể nào — mở được kết nối SSH là SSHFS chạy, dù trên mạng nội bộ an toàn hay mạng xa không an toàn.1 Nhược: hiệu năng kém đi vì chi phí mã hoá, biên dịch và vận chuyển (“nhưng có thể không tệ như bạn nghĩ”), và các thiết lập nhiều người dùng bị hạn chế.1

    Trang man ghi gì

    sshfs(1) ghi cú pháp sshfs [user@]host:[dir] mountpoint [options] — khớp đúng dạng Ward dùng — và mô tả SSHFS là máy khách hệ tệp dựa trên SSH, hoạt động qua hệ con SFTP.12 Một khác biệt nhỏ đáng biết: bản man hiện hành nêu lệnh tháo dưới dạng fusermount3 -u mountpoint trên Linux (và umount trên macOS/FreeBSD), phản ánh việc libfuse đã lên phiên bản 3.12 Chữ fusermount của Ward vẫn đúng ở nhiều bản phân phối; trên máy của bạn, hãy dùng tên nào thật sự tồn tại.

  2. nfs

    NFS — cùng cú pháp, khác thế giới NFS — chuẩn cũ của thế giới Unix NFS — same syntax, different world

    Để gắn một thư mục ở xa bằng NFS, Ward dùng đúng cú pháp cơ bản như khi gắn thư mục CIFS: mount -t nfs server:directory mountpoint. Về kỹ thuật, bạn không cần tuỳ chọn -t nfs vì mount đáng ra tự nhận ra, nhưng bạn nên tìm hiểu các tuỳ chọn trong trang nfs(5).1 Ở đó có vài tuỳ chọn bảo mật khác nhau qua tham số sec; nhiều quản trị viên trên mạng nhỏ, khép kín dùng kiểm soát truy cập dựa trên máy, còn các phương pháp tinh vi hơn — như xác thực dựa trên Kerberos — đòi hỏi cấu hình bổ sung ở những phần khác của hệ thống.1

    NFS là cách cũ nhất và phổ biến nhất để các máy Unix dùng chung thư mục. Lệnh gắn nhìn y hệt cách gắn ổ đĩa thường. Nhớ nhé: gắn vào là dùng như thư mục trên máy mình.

    To mount a remote directory with NFS, Ward uses the same basic syntax as for a CIFS directory: mount -t nfs server:directory mountpoint. Technically you don't need -t nfs because mount should figure it out, but you may want to investigate the options in the nfs(5) manual page.1 There you'll find several security options via sec; many administrators on small, closed networks use host-based access control, while more sophisticated methods such as Kerberos-based authentication require additional configuration elsewhere in your system.1

    Gắn khi cần, không gắn lúc khởi độngMount on demand, not at boot Khi bạn dùng hệ tệp qua mạng nhiều hơn, Ward khuyên dựng automounter để hệ thống chỉ gắn hệ tệp lúc bạn thật sự chạm vào nó — nhằm tránh các vấn đề phụ thuộc khi khởi động. Công cụ tự gắn truyền thống tên là automount, có một bản mới hơn tên amd, nhưng phần lớn chức năng nay đã được thay thế bởi kiểu đơn vị automount của systemd.117 Đừng bắt máy nối tới ổ mạng ngay lúc khởi động — nếu mạng chưa sẵn sàng, máy sẽ treo. Hãy để nó nối khi bạn cần. As you use network filesystems more, Ward recommends setting up the automounter so the system mounts them only when you actually try to use them — preventing dependency problems at boot. The traditional tool was automount, with a newer version called amd, but much of this functionality has now been supplanted by systemd's automount unit type.117

    Phía máy chủ mà sách cố ý không dạy

    Ward nói thẳng trong khung phụ: dựng một máy chủ NFS để chia sẻ tệp cho các máy Linux khác phức tạp hơn cấu hình phía máy khách — bạn cần chạy các tiến trình nền máy chủ (mountd và nfsd) và thiết lập tệp /etc/exports phản ánh những thư mục bạn chia sẻ. Ông không trình bày máy chủ NFS, chủ yếu vì thường tiện hơn nhiều nếu chỉ mua một thiết bị NAS lo giúp; nhiều thiết bị như vậy chạy trên nền Linux nên tự nhiên có hỗ trợ máy chủ NFS, và nhà sản xuất tăng giá trị bằng công cụ quản trị riêng giúp bớt khổ với những việc tẻ nhạt như cấu hình RAID và sao lưu đám mây.1

    /etc/exports là gì

    Trang exports(5) mô tả tệp này là “bảng các hệ tệp vật lý cục bộ trên một máy chủ NFS mà máy khách NFS truy cập được”, mỗi mục kèm danh sách tuỳ chọn và một danh sách kiểm soát truy cập; bảng được exportfs(8) đọc và chuyển cho mountd(8).14 Một mặc định đáng nhớ: ánh xạ uid 0 sang danh tính ẩn danh — gọi là root squashing — “là mặc định, và có thể tắt bằng no_root_squash”.14

    Tuỳ chọn sec cụ thể là gì

    nfs(5) ghi sec= nhận danh sách các “hương vị” bảo mật, ngăn bằng dấu hai chấm, với các giá trị hợp lệ none, sys, krb5, krb5i, krb5p; nếu không chỉ định, máy khách tự tìm một hương vị mà cả hai bên đều hỗ trợ.13 Ba biến thể Kerberos lần lượt cho: chứng minh danh tính bằng mật mã trong mỗi yêu cầu RPC, thêm phát hiện giả mạo, và mã hoá toàn bộ yêu cầu RPC.13 RFC 7530 — “Network File System (NFS) Version 4 Protocol” — quy định rằng máy khách và máy chủ NFSv4 phải hỗ trợ cơ chế bảo mật Kerberos V5, và ánh xạ ba giả-hương-vị krb5, krb5i, krb5p sang ba mức dịch vụ RPCSEC_GSS.15 Đây chính là “cấu hình bổ sung” mà Ward nhắc tới.

  3. cloud storage

    Đám mây — đổi hiệu năng lấy sự khỏi lo Ổ đĩa trên mây — người khác giữ giùm The cloud — trading performance for peace of mind

    Ward nêu lựa chọn thứ ba rất gọn: lưu trữ đám mây như AWS S3 hay Google Cloud Storage không có hiệu năng của lưu trữ trên mạng cục bộ, nhưng đổi lại có hai ưu thế lớn — bạn không bao giờ phải bảo trì chúng, và bạn không phải lo chuyện sao lưu.1 Ngoài các giao diện web và giao diện lập trình mà mọi nhà cung cấp đều có, còn có cách gắn hầu hết các loại lưu trữ đám mây vào một hệ thống Linux — và khác với hầu hết hệ tệp đã gặp trong sách, chúng gần như đều được hiện thực bằng FUSE.1

    Ổ đĩa trên mây chậm hơn ổ trong nhà, nhưng bạn không phải thay ổ hỏng, không phải nhớ sao lưu. Đó là cái bạn mua. Nhớ nhé: mây thì chậm hơn nhưng khỏi phải chăm.

    Ward states the third option compactly: cloud storage such as AWS S3 or Google Cloud Storage doesn't have the performance of storage on a local network, but it offers two significant advantages — you never have to maintain it, and you shouldn't have to worry about backups.1 Besides the web (and programmatic) interfaces every provider offers, there are ways to mount most kinds of cloud storage on a Linux system — and unlike most of the filesystems in the book, these are nearly all implemented as FUSE interfaces.1

    Vòng tròn khép lại với rsyncThe circle closes back to rsync Ward nối lại đầu chương: bạn có thể gắn lưu trữ internet như Amazon S3 vào hệ thống Linux rồi dùng rsync --delete để đồng bộ định kỳ một hệ tệp với lưu trữ mạng — “một hệ thống sao lưu rất hiệu quả”.1 Gắn ổ trên mây vào máy, rồi bảo rsync đồng bộ mỗi đêm. Thế là có sao lưu. Ward ties it back to the opening: you can attach internet storage such as Amazon's S3 to your Linux system and then use rsync --delete to periodically synchronize a filesystem with the network storage — "a very effective backup system".1

    Vì sao “nhiều lựa chọn” lại hợp lý

    Với một số nhà cung cấp phổ biến như S3, Ward nói thậm chí có nhiều lựa chọn khác nhau — và điều đó hợp lý, vì một bộ xử lý FUSE chẳng qua chỉ là một tiến trình nền không gian người dùng đứng giữa nguồn dữ liệu và nhân.1 Nói cách khác, rào cản viết một hệ tệp mới đã hạ xuống mức của một chương trình thường; s3fs-fuse là một trong những hiện thực mã nguồn mở gắn một bucket S3 vào cây thư mục cục bộ theo đúng kiểu đó.18 Sách cố ý không trình bày chi tiết cách thiết lập một máy khách lưu trữ đám mây, vì mỗi cái một khác.1

    Chi tiết kỹ thuật của FUSE

    Tài liệu nhân mô tả FUSE gồm ba mảnh: một mô-đun nhân (fuse.ko), một thư viện không gian người dùng (libfuse.*) và một tiện ích gắn (fusermount); điểm mạnh nổi bật là “allowing secure, non-privileged mounts”.16 Vì lời gọi hệ thống mount() là thao tác đặc quyền, fusermount được cài đặt setuid root — và để bù lại, nó luôn thêm nosuid cùng nodev vào tuỳ chọn gắn cho các lần gắn không đặc quyền, đồng thời kiểm tra quyền trên điểm gắn.16 Đây chính là lý do kỹ thuật cho lời khuyên “tốt nhất nên gắn với tư cách người dùng thường” ở phần SSHFS.

  4. the state of sharing

    Vì sao vẫn chưa có một chuẩn duy nhất Vì sao chưa ai thắng cuộc Why there is still no single standard

    Ward kết chương bằng một sự thừa nhận: phần bàn về NFS và chia sẻ tệp nói chung có vẻ còn dang dở — và đúng là vậy, nhưng chỉ dang dở đúng bằng mức mà chính các hệ chia sẻ tệp còn dang dở.1 Cụ thể: mức bảo mật cơ sở của NFS khá thấp, cần rất nhiều công sức bổ sung để cải thiện; các hệ CIFS khá hơn ở điểm này vì những tầng mã hoá cần thiết đã được tích hợp vào phần mềm hiện đại. Nhưng giới hạn hiệu năng thì không dễ vượt qua — chưa kể một hệ thống có thể hoạt động tệ đến mức nào khi tạm thời mất kết nối tới lưu trữ mạng của nó.1

    Đã có nhiều người thử làm một cách chia sẻ tệp thật tốt. Chưa ai làm ra cái vừa nhanh, vừa an toàn, vừa dễ cài. Vì thế mới còn nhiều lựa chọn. Nhớ nhé: nhiều lựa chọn thường có nghĩa là chưa có lựa chọn nào đủ tốt.

    Ward closes the chapter with an admission: the discussion of NFS and of file sharing in general may feel somewhat incomplete — and it might be, but only as much as the file sharing systems themselves are.1 Concretely: NFS's base security level is quite low, requiring significant extra work to improve; CIFS systems are somewhat better in this regard, as the necessary encryption layers are built into contemporary software. But performance limitations aren't easy to overcome — not to mention how badly a system can perform when it is temporarily unable to reach its network storage.1

    Câu chuyện AFSThe AFS story Nỗ lực rộng nhất, theo Ward, có lẽ là Andrew File System (AFS) — thiết kế lần đầu vào thập niên 1980, được dựng quanh lời giải cho chính những vấn đề này. Vậy vì sao không phải ai cũng dùng AFS? Không có một câu trả lời duy nhất, nhưng phần lớn quy về một sự thiếu linh hoạt nhất định trong vài phần của thiết kế — ví dụ cơ chế bảo mật đòi hỏi một hệ xác thực Kerberos, thứ tuy phổ biến khắp nơi nhưng chưa bao giờ là chuẩn trên các hệ Unix và cần công sức không nhỏ để dựng cùng duy trì (bạn phải dựng hẳn một máy chủ cho nó).11920 Có một hệ rất hay từ thập niên 1980 tên AFS, nhưng muốn dùng nó thì phải dựng thêm cả một hệ đăng nhập riêng — quá sức với người dùng nhỏ. The most extensive attempt, Ward suggests, is perhaps the Andrew File System (AFS) — first designed in the 1980s and built around solutions to exactly these problems. So why doesn't everyone use AFS? There is no single answer, but much of it comes down to a certain lack of flexibility in parts of the design — its security mechanism, for example, requires a Kerberos authentication system, which, though universally available, has never been standard on Unix systems and takes a nontrivial amount of work to set up and maintain (you have to set up a server for it).11920

    Ai thì AFS lại hợp

    Với một tổ chức lớn, đáp ứng những yêu cầu như Kerberos không phải vấn đề — và đó chính là môi trường AFS phát triển tốt: các trường đại học và định chế tài chính là những nơi dùng AFS lớn. Nhưng với người dùng nhỏ thì đơn giản là dễ hơn nếu không làm thế, nên họ chọn những lựa chọn giản dị hơn như NFS hay CIFS.1 Ward lưu ý giới hạn kiểu này lan cả sang Windows: bắt đầu từ Windows 2000, Microsoft chuyển sang Kerberos làm xác thực mặc định trên dòng sản phẩm máy chủ, nhưng các mạng nhỏ hiếm khi là miền Windows có loại máy chủ ấy.1 Tài liệu hiện hành của Microsoft xác nhận trạng thái ấy vẫn còn: Windows Server hiện thực giao thức xác thực Kerberos phiên bản 5, với Trung tâm phân phối khoá (KDC) chạy trên mọi bộ điều khiển miền và dùng cơ sở dữ liệu Active Directory Domain Services làm cơ sở dữ liệu tài khoản.21

    Lý do kỹ thuật thứ hai: mã trong nhân

    Ngoài điều kiện tiên quyết về xác thực, Ward nêu một vấn đề sâu hơn: nhiều máy khách hệ tệp mạng theo truyền thống là mã nhân — NFS là ví dụ rõ nhất. Yêu cầu của hệ tệp mạng phức tạp tới mức bắt đầu sinh vấn đề: riêng khâu xác thực đã không có chỗ trong nhân. Một hiện thực máy khách nằm trong nhân cũng thu hẹp nghiêm trọng số lập trình viên có thể tham gia, làm chậm cả hệ thống nói chung; có trường hợp mã máy khách nằm ở không gian người dùng, nhưng bên dưới vẫn luôn phải có một kiểu tuỳ biến nhân nào đó.1

    Vì sao đám mây lại là lối thoát

    Ward kết bằng một dự đoán có cơ sở. Khi các nhà cung cấp bắt đầu bán lưu trữ đám mây, rõ ràng các hình thức chia sẻ tệp truyền thống không phù hợp. Trên đám mây, phương thức truy cập được dựng bên trên những cơ chế bảo mật như TLS, khiến việc truy cập lưu trữ không đòi hỏi dựng cả một hệ thống lớn như Kerberos. Với vô số lựa chọn qua FUSE, “chúng ta không còn phụ thuộc vào nhân cho bất kỳ phần nào của máy khách” — mọi khâu xác thực, mã hoá hay xử lý đều làm được ở không gian người dùng. Vì thế tương lai rất có thể sẽ thấy những thiết kế chia sẻ tệp linh hoạt hơn về bảo mật và cả những mặt khác như dịch tên tệp.1

Đí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.

“Thêm hay bớt dấu / cuối thì cũng thế thôi” "A trailing / makes no real difference"

Ngộ nhận: dir và dir/ chỉ là hai cách viết của cùng một đường dẫn, nên rsync xử lý như nhau.

Bản văn nói: thêm dấu / vào tên nguồn “thay đổi đáng kể hành vi” — rsync -a dir/ host:dest_dir đổ nội dung của dir vào dest_dir mà không tạo dir ở đích, còn bỏ dấu / thì bạn nhận dest_dir/dir/….1 Man page phát biểu cùng điều bằng chữ của nó: dấu gạch chéo cuối “tránh tạo thêm một tầng thư mục ở đích”.2 Kết hợp với --delete, nhầm lẫn này không còn là phiền toái mà thành khả năng xoá nhầm tệp chẳng liên quan.1

Misconception: dir and dir/ are two spellings of the same path, so rsync treats them alike.

The text says: adding a / to the source name "significantly changes the behavior" — rsync -a dir/ host:dest_dir pours the contents of dir into dest_dir without creating dir there, whereas omitting the / gives you dest_dir/dir/….1 The man page states the same in its own words: a trailing slash "avoid[s] creating an additional directory level at the destination".2 Combined with --delete, the slip stops being a nuisance and becomes a way to remove unrelated files.1

“Đặt browseable = no là mục chia sẻ đã được bảo vệ” "Setting browseable = no protects the share"

Ngộ nhận: không hiện trong danh sách duyệt nghĩa là không ai vào được.

Bản văn nói: đặt tham số này thành no thì bạn vẫn truy cập được các mục chia sẻ trên máy chủ Samba — chỉ là cần biết chính xác tên của chúng.1 Trang smb.conf(5) mô tả tham số này đúng ở phạm vi hiển thị: nó điều khiển việc mục chia sẻ có được thấy trong danh sách khả dụng hay không, chứ không phải quyền truy cập.3 Quyền truy cập là việc của valid users, guest ok và mật khẩu.1

Misconception: not appearing in the browse list means nobody can get in.

The text says: set it to no for a share and you'll still be able to access it on the Samba server — you just need to know the exact name.1 The smb.conf(5) page scopes the parameter to visibility exactly: it controls whether the share is seen in the list of available shares, not who may reach it.3 Access is the job of valid users, guest ok and passwords.1

“Gắn được thư mục qua mạng thì coi như có ổ đĩa thứ hai” "A mounted network share is just a second disk"

Ngộ nhận: đã gắn vào cây thư mục rồi thì dùng y như lưu trữ cục bộ.

Bản văn nói: hiệu năng lưu trữ qua mạng thường kém so với cục bộ, và độ trễ là một trong những thủ phạm chính — trước khi gửi dữ liệu, máy chủ phải nhận và giải mã yêu cầu rồi định vị và nạp dữ liệu, mà các bước chậm nhất ấy lặp lại với gần như mọi lần mở tệp mới.1 Vì thế Ward khuyên rất cụ thể: dữ liệu lớn không cần truy cập ngẫu nhiên thường xuyên thì không sao, nhưng nếu bạn dựng video hay phát triển một hệ phần mềm cỡ lớn, hãy giữ mọi tệp trên lưu trữ cục bộ.1

Misconception: once it's mounted in your tree, you use it just like local storage.

The text says: network storage performance is often poor compared to local storage, and latency is one of the primary culprits — before sending any data the server must accept and decipher the request, then locate and load the data, and those slowest steps repeat for almost every new file access.1 So Ward's advice is concrete: large amounts of data not requiring frequent random access will be fine, but if you're editing video or developing a software system of any substantial size, keep all your files on local storage.1

Tự kiểm tra Self-check

Bạn đã chọn được đúng công cụ chưa? Thử trả lời xem nào Can you pick the right tool 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à mục 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 section you should reread.

  1. Khác biệt giữa truyền tệp và chia sẻ tệp thật sự là gì, và vì sao chương này tách bạch hai việc đó?

    Gợi ý sâu hơn: hãy nói thêm vì sao scp -r không cho bạn một bản sao chính xác.

  2. rsync -a dir host:dest và rsync -a dir/ host:dest để lại gì ở đích? Vì sao kết hợp với --delete lại nguy hiểm?

    Gợi ý sâu hơn: tính năng nào của shell làm tăng nguy cơ mắc lỗi này?

  3. Mặc định rsync dựa vào hai thuộc tính nào để quyết định bỏ qua một tệp, và tuỳ chọn nào thay phép kiểm đó bằng tổng kiểm?

    Gợi ý sâu hơn: cái giá của tuỳ chọn ấy là gì, và khi nào nó đáng?

  4. Bốn bước dựng máy chủ Samba là gì? Hai tiến trình nền ở bước cuối tên gì và mỗi cái làm việc gì?

    Gợi ý sâu hơn: nếu bạn sửa smb.conf khi máy chủ đang chạy thì phải làm gì?

  5. Vì sao Samba cần một cơ sở dữ liệu mật khẩu riêng, và dòng cấu hình nào có thể khiến người dùng mất quyền đăng nhập Linux?

    Gợi ý sâu hơn: tham số obey pam restrictions chi phối khâu nào — xác thực hay quản lý tài khoản?

  6. SSHFS mua sự tiện lợi bằng cái gì, và điều kiện duy nhất mà nó đòi hỏi ở máy xa là gì?

    Gợi ý sâu hơn: vì sao nên gắn nó với tư cách người dùng thường, và tháo bằng lệnh nào?

  7. Theo Ward, vì sao AFS không trở thành chuẩn dù được thiết kế đúng quanh những vấn đề này?

    Gợi ý sâu hơn: ngoài điều kiện về Kerberos, vấn đề kỹ thuật thứ hai ông nêu là gì?

  1. “Chép tệp” và “dùng chung thư mục” khác nhau chỗ nào?

  2. Dấu / ở cuối tên thư mục làm rsync đổi hành vi thế nào?

  3. Trước khi cho rsync xoá tệp, bạn nên làm gì?

  4. Samba dùng để làm gì? Nói một câu thôi.

  5. Vì sao đặt “không hiện trong danh sách” chưa phải là khoá lại?

  6. Nếu bạn dựng video, nên để tệp trên máy mình hay trên ổ mạng? Vì sao?

  1. What is the difference between file transfer and true file sharing, and why does this chapter separate them?

  2. What does rsync -a dir host:dest leave at the destination versus rsync -a dir/ host:dest? Why is the combination with --delete dangerous?

  3. Which two attributes does rsync use by default to decide it can skip a file, and which option replaces that check with a checksum?

  4. What are the four steps of setting up a Samba server? Name the two daemons in the last step and what each does.

  5. Why does Samba need its own password database, and which configuration line can cost a user their Linux login?

  6. What does SSHFS buy its convenience with, and what is its only requirement on the remote host?

  7. According to Ward, why did AFS not become the standard even though it was designed around exactly these problems?

Khép lại chương Closing the chapter

Ở thời điểm này, chúng ta thấy mình không có một phương thức chia sẻ tệp qua mạng thật sự chuẩn mực trong thế giới Linux/Unix — ít nhất là nếu bạn không phải một cơ sở lớn, hoặc không sẵn lòng bỏ ra kha khá công sức. Nhưng điều đó không nhất thiết sẽ mãi như vậy.1

Hôm nay chưa có cách chia sẻ tệp nào là “cách chuẩn”. Nhưng chuyện đó có thể sẽ thay đổi. Nhớ nhé: chọn công cụ theo việc của mình, và đừng chờ một cách hoàn hảo.

At the moment, we find ourselves without a truly standard means of network file sharing in the Linux/Unix world — at least if you're not a large site or you aren't willing to put in a fair amount of work. However, this won't necessarily always be the case.1