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
scp -r cho thư mục; rsync cho việc làm đi làm lại
Gửi một lần: trang web tạm. Gửi thường xuyên: rsync
SimpleHTTPServer for one-offs; scp -r for a tree; rsync when you do it again and again
mount -t cifs đi chiều ngược lại
Nói chuyện với máy Windows
Samba serves SMB to Windows; mount -t cifs goes the other way
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
-
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.1Bạ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.1Cả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.1Tà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
SimpleHTTPRequestHandlersẽ đ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 -
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ụcdirnằm bên trongdest_dirtrênhost.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_dirchép mọi thứ bên trongdirvàodest_dirmà không tạo radirở đích — gần giốngcp dir/* dest_dirtrên hệ tệp cục bộ.1Nghĩ thế này:
dirlà “gửi cả cái hộp”, còndir/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 directorydirinsidedest_dironhost.1 Adding a/to the source name changes the behaviour significantly:rsync -a dir/ host:dest_dircopies everything insidedirintodest_dirwithout creatingdirat the destination — similar tocp dir/* dest_diron the local filesystem.1Ví dụ của tác giảThe author's example Códir/avàdir/b. Bản có gạch chéo chodest_dirchứaavàbnhưng không códir; bản bỏ gạch chéo cho radest_dir/dir/avàdest_dir/dir/b.1 Hộp có hai mónavà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 havedir/aanddir/b. The trailing-slash version leavesdest_dirholdingaandbbut nodir; omitting the slash yieldsdest_dir/dir/aanddest_dir/dir/b.1Trang 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 /destvàrsync -av /src/foo/ /dest/foocho kết quả như nhau.2Vì 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ạidir, dồn mọi thứ vào. Nhưng khi kết hợp dấu/cuối với--deletethì 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 -
--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,
rsyncché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ụcdchứaavàbsang một máy vốn đã cód/c, thì sau khi xong đích sẽ có cảd/a,d/blẫnd/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.1Mặc định
rsyncchỉ 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
rsynccopies files and directories without considering what is already at the destination. Ward's example: transfer directorydcontainingaandbto a machine that already hasd/c, and afterwards the destination holdsd/a,d/bandd/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--deletedoes.1Cả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àorsyncđị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-nvso you know exactly whenrsyncwants to delete a file.1Điều kiện mà man page thêm vào
--deletexoá 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ầursyncgửi cả thư mục (dirhoặcdir/), 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ênrsyncchỉ thấy các tệp riêng lẻ chứ không thấy thư mục cha.2Man 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.
-
--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
srcsanghostnhưng bỏ qua mọi thứ tên.git, bạn viếtrsync -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ì--excludenhậ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.1Bạ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
srctohostwhile excluding anything named.git, you writersync -a --exclude=.git src host:. Ward stresses that this excludes all files and directories named.git, because--excludetakes a pattern, not an absolute filename. To exclude one specific item, give an absolute path starting with/:--exclude=/src/.git.1Chú thích quan trọngThe note that matters Dấu/đầu tiên trong/src/.gitkhô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/.gitis not your system's root directory but the base directory of the transfer.1Bốn mẹo còn lại của tác giả
Bạn có thể dùng bao nhiêu tham số
--excludetuỳ 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ênitemnhư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ể.1Quy 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*skhớpthisnhưng không khớpethers.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 -
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,
rsyncgử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-existingkhô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.1rsynccó 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,
rsynctransfers 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-existingdoesn't clobber files already on the target;--backup(-b) renames existing files by adding a~suffix before transferring the new ones;--suffix=schanges that suffix; and--update(-u) doesn't clobber any target file with a later date than its source counterpart.1Quy trình hai bước của tác giảThe author's two-step routine Lần đầu chạyrsync -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ớirsync -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 runrsync -nto verify nothing already exists at the destination. After the real run, run it again withrsync -v: this time no files should appear in the transfer list, because the file set exists on both ends with the same modification dates.1Mức độ ồn ào
Không có tuỳ chọn đặc biệt,
rsyncchạy im lặng, chỉ lên tiếng khi có vấn đề.-vbật chế độ chi tiết,-vvchi tiết hơn — Ward nói bạn có thể gắn bao nhiêu chữvtuỳ 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ùngrsync --stats.1 Man page mô tả cùng thang đó: một-vcho biết tệp nào đang được chuyển kèm tóm tắt ngắn ở cuối; hai-vcho biết tệp nào bị bỏ qua; “More than two -v options should only be used if you are debugging rsync.”2-clàm gì cho đúngMan page nói rõ: thay vì phép kiểm nhanh theo kích thước và thời gian,
-cso 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”. -
-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
-zkè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.1Né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
--bwlimitlà 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
-zalongside-ato 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.1Vì 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
--bwlimitMan page mô tả
--bwlimit=RATElà 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à0nghĩ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=100000tươ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.
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
-
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ềnnmbdvà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ệpsmb.confthường nằm trong một thư mụcetcnhư/etc/samba, nhưng có khi phải tìm quanh vì nó cũng có thể ở một thư mụclibnhư/usr/local/samba/lib.1Muố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.conffile; add file sharing sections; add printer sharing sections; then start the Samba daemonsnmbdandsmbd.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 anetcdirectory such as/etc/samba, though you may have to hunt for it, as it can also sit in alibdirectory 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ạngsmb.confgiố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 thesmb.confformat 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].1Ba tham số của
[global]Ward giải thích:
netbios namelà tên máy chủ — nếu bỏ qua, Samba dùng tên host Unix;server stringlà mô tả ngắn, mặc định là số hiệu phiên bản Samba;workgrouplà 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 Trangsmb.conf(5)xác nhận cả ba: mặc định củanetbios namelà thành phần đầu của tên DNS của máy (tối đa 15 ký tự), mặc định củaserver stringlàSamba %vvới%vđược thay bằng số hiệu phiên bản, vàworkgroupmặc định làWORKGROUP.3Phạ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
-
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ẻ.interfaceskhiế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.0hayinterfaces = enp0s31f6.bind interfaces only = yesđi kèm vớiinterfacesđể 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, billcho 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ư.1Bạ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.interfacesmakes Samba listen only on the given networks or interfaces, e.g.interfaces = 10.23.2.0/255.255.255.0orinterfaces = enp0s31f6.bind interfaces only = yesaccompaniesinterfacesto limit access to only the machines you can directly reach on those interfaces.valid users = jruser, billallows the given users.guest okset 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 lockedbrowseablequyết định mục chia sẻ có hiện ra với trình duyệt mạng hay không. Đặtnocho 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.browseablecontrols whether a share is visible to network browsers. Set it tonoand you can still access the share on the Samba server — you just need to know its exact name.1Trang 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ớismbdvànmbdtheo cách hơi khác nhau, mặc định làno.3browseableđ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 địnhyes.3guest okkhi đặtyesnghĩ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 địnhno.3Một sắc thái nhỏ của
valid usersWard 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 -
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.1Má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.1Cái bẫy được tác giả nêu đích danhThe trap the author names Nếu thấy dòngunix password sync = yestrongsmb.conf, hãy cẩn thận: nó khiếnsmbpasswdđổ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 seeunix password sync = yesinsmb.conf, be careful: it makessmbpasswdchange 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.1Thê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-dvà bật lại bằng-e.1 Trangsmbpasswd(8)khớp từng điểm:-dghi cờDvà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”;-ekhô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).4Ai đổ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õsmbpasswdtrơ 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”.4Vì sao có
obey pam restrictionsWard giải thích tham số này bảo đảm người dùng đổi mật khẩu bằng
smbpasswdphả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. -
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ạynmbd -D -s smb_config_filevàsmbd -D -s smb_config_file.nmbdlà máy chủ tên NetBIOS, cònsmbdlàm công việc thật sự là xử lý các yêu cầu chia sẻ;-Dchỉ định chế độ tiến trình nền.1Mộ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, runnmbd -D -s smb_config_fileandsmbd -D -s smb_config_file.nmbdis a NetBIOS name server, whilesmbddoes the actual work of handling share requests;-Dspecifies daemon mode.1Khi bạn sửa cấu hìnhWhen you edit the config Nếu sửasmb.conftrong lúcsmbdđ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 đósystemctllà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 altersmb.confwhilesmbdis 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 casesystemctldoes the work.1Trang 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|--daemonkhiến nó tách ra chạy nền, nhận yêu cầu ở cổng thích hợp.5smbd(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.8HUP 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ớinmbd, SIGHUP khiến nó đổ danh sách tên ra tệpnamelist.debugvà 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.5Khi 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.nmbdvàlog.smbd, thường nằm trong một thư mục/var/lognhư/var/log/samba; ở đó bạn còn thấy nhật ký riêng cho từng máy khách.1 -
[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ớipath,comment,guest ok = no,writable = yes,printable = no.1 Ông giải nghĩa từng tham số:guest ok = yescho phép khách vào (publiclà từ đồng nghĩa);writable = yeshaytrueđánh dấu mục chia sẻ là đọc-ghi — và đừng cho khách truy cập một mục đọc-ghi;printablehiển nhiên phải lànohoặcfalsevới một mục chia sẻ thư mục;veto fileschặ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ênbin.1Bạ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 withpath,comment,guest ok = no,writable = yes,printable = no.1 He glosses each:guest ok = yesallows guest access (publicis a synonym);writable = yesortruemarks the share read-write — and do not allow guest access to a read-write share;printableobviously must benoorfalseon a directory share;veto filesprevents 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 namedbin.1Thư 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/passwdcủ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ế%Strong tham sốpath— chẳng hạnpath = /u/%Schuyển thư mục[homes]của người dùng sang/u/user; Samba thay%Sbằ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/passwdentry to determine their home directory. To keep Windows home directories somewhere other than the regular Linux ones, use the%Ssubstitution inpath— e.g.path = /u/%Sswitches a user's[homes]directory to/u/user; Samba substitutes the current username for%S.1Chia 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ồmcomment,browseable = yes,printing = CUPS,path = cups,printable = yes,writable = no. Để dùng đượcprinting = 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.3Mộ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 = yesthay 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.1Sắc thái của
printablevàveto filesTrang man nói
printable = yesnghĩ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 fileslà “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 ýwritabletrong tài liệu hiện tại là “từ đồng nghĩa đảo” củaread only.3 -
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
smbclientin ấ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ênSERVER. Sau đó nó hỏi mật khẩu; bấm ENTER để thử vào với tư cách khách.1Bạ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
smbclientclient 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-Lto list a remote server's shares:smbclient -L -U username SERVER; drop-U usernameif your Linux username matches your username onSERVER. 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ộtType. Ward dặn chỉ để ý các mụcDiskvàPrinter— các mụcIPClà để quản trị từ xa. Dùng tên ở cộtSharenameđể 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 aTypefield. Ward says to pay attention only to theDiskandPrintershares — theIPCones are for remote management. Use the name in theSharenamecolumn to access each share.1Chế độ 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ắcsmb: \>. Ward nói ở chế độ truyền tệp nàysmbclientgiốngftpcủa Unix, với các lệnhget 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à!pwdvà!ls) vàhelp.1 Trangsmbclient(1)tự mô tả đúng là “ftp-like client to access SMB/CIFS resources on servers” và xác nhậnget,put,cd,lcd,!,help.9Gắ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ùngSERVER:sharenamechứ không phải dạng\\SERVER\sharenamequen thuộc:mount -t cifs SERVER:sharename mountpoint -o user=username,pass=password. Đểmountlà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
-
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ỏ đượcusername@nếu tên người dùng hai bên trùng nhau, và bỏ được:dirnế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.1Nế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 dropusername@if the username is the same on both sides, and omit:dirif 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.1Thá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ằngfusermount -u mountpoint. Siêu người dùng cũng tháo được bằngumount; 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 withfusermount -u mountpoint. The superuser can also unmount withumount; but to ensure consistency of ownership and security, this type of filesystem is usually best mounted as a regular user.1Hai ư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ápsshfs [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ạngfusermount3 -u mountpointtrên Linux (vàumounttrên macOS/FreeBSD), phản ánh việc libfuse đã lên phiên bản 3.12 Chữfusermountcủ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. -
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 nfsvìmountđáng ra tự nhận ra, nhưng bạn nên tìm hiểu các tuỳ chọn trong trangnfs(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.1NFS 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 nfsbecausemountshould figure it out, but you may want to investigate the options in thenfs(5)manual page.1 There you'll find several security options viasec; 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.1Gắ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ênamd, nhưng phần lớn chức năng nay đã được thay thế bởi kiểu đơn vịautomountcủ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 wasautomount, with a newer version calledamd, but much of this functionality has now been supplanted by systemd'sautomountunit type.117Phí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ủ (
mountdvànfsd) và thiết lập tệp/etc/exportsphả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/exportslà 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 đượcexportfs(8)đọc và chuyển chomountd(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ằngno_root_squash”.14Tuỳ chọn
seccụ thể là gìnfs(5)ghisec=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,krb5psang 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. -
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ùngrsync --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ảorsyncđồ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 usersync --deleteto periodically synchronize a filesystem with the network storage — "a very effective backup system".1Vì 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-fuselà 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.1Chi 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ốngmount()là thao tác đặc quyền,fusermountđược cài đặt setuid root — và để bù lại, nó luôn thêmnosuidcùngnodevvà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. -
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).11920Ai 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.
-
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 -rkhông cho bạn một bản sao chính xác. -
rsync -a dir host:destvàrsync -a dir/ host:destđể lại gì ở đích? Vì sao kết hợp với--deletelạ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?
-
Mặc định
rsyncdự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?
-
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.confkhi máy chủ đang chạy thì phải làm gì? -
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 restrictionschi phối khâu nào — xác thực hay quản lý tài khoản? -
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?
-
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ì?
“Chép tệp” và “dùng chung thư mục” khác nhau chỗ nào?
Dấu
/ở cuối tên thư mục làmrsyncđổi hành vi thế nào?Trước khi cho
rsyncxoá tệp, bạn nên làm gì?Samba dùng để làm gì? Nói một câu thôi.
Vì sao đặt “không hiện trong danh sách” chưa phải là khoá lại?
Nếu bạn dựng video, nên để tệp trên máy mình hay trên ổ mạng? Vì sao?
-
What is the difference between file transfer and true file sharing, and why does this chapter separate them?
-
What does
rsync -a dir host:destleave at the destination versusrsync -a dir/ host:dest? Why is the combination with--deletedangerous? -
Which two attributes does
rsyncuse by default to decide it can skip a file, and which option replaces that check with a checksum? -
What are the four steps of setting up a Samba server? Name the two daemons in the last step and what each does.
-
Why does Samba need its own password database, and which configuration line can cost a user their Linux login?
-
What does SSHFS buy its convenience with, and what is its only requirement on the remote host?
-
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