Bài đăng nổi bật

Hướng dẫn thay đổi thư mục root mặc định của Docker trên Linux

Hoàn cảnh: người viết gặp một trường hợp như này Được team hạ tầng cấp cho một máy chủ gồm 2 phân vùng lưu trữ, 1 phân vùng 20GB được gắn và...

13 tháng 9, 2014

fstab trong Linux

Fstab là gì? Hiểu nôm na nó là một tập tin hỗ trợ việc quản lý gắn kết (mount) và sử dụng các phân vùng của hệ điều hành.
Trong bài viết này, tôi sẽ giới thiệu cho bạn cách để làm chủ tập tin cấu hình này, tất nhiên là chỉ với những kiến thức nằm trong tầm hiểu biết của cá nhân tôi.
Cấu trúc chung của một fstab bao gồm các dòng có nội dung như sau:

[Device] [Mount Point] [File System Type] [Options] [Dump] [Pass]

Trong đó:
Device: là thiết bị hoặc phân vùng (có thể là đường dẫn của tập tin đại diện hoặc UUID của đối tượng), device được ở đây còn có thể là thiết bị mạng, phân vùng chia sẻ,...
Có thể xem thông tin UUID của thiết bị bằng lệnh:  sudo blkid
Một ổ phân vùng thường có đường dẫn dạng: /dev/sdxy
 Hoặc có dạng LABEL=label
Hoặc các dạng ổ mạng, chia sẻ:
  • Samba: //server/share
  • NFS: //server:/share
  • SSHFS : sshfs#user@server:/share
Mount point: địa chi gắn kết thiết bị, ví dụ /opt/data/
File System Type: định dạng của thiết bị, có thể là:
  • auto
  • vfat: dành cho các phân vùng có định dạng FAT
  • ntfs, ntfs-3g: dành cho các phân vùng có định dạng NTFS
  • ext2, ext3, ext4, jfs, reiserfs
  • udf, iso9660: dành cho các ổ đĩa CD, DVD,
  • swap.
Options: các tùy chọn áp dụng trên phân vùng, được phân cách bằng dấu phẩy (,)
  •  sync/async: tất cả các thao tác đọc, ghi trên thiết bị phải ở dạng đồng bộ/bất đồng bộ
  • auto: tự động gắn kết phân vùng khi khởi động hệ điều hành.
  • noauto: không tự động gắn kết phân vùng khi khởi động hệ điều hành.
  • dev/nodev: tùy chọn này hiểu nôm na là cho phép hoặc không cho phép coi một node nằm ngoài thư mục /dev/ là một thiết bị (ví dụ nếu dùng nodev thì hệ điều hành sẽ coi việc định nghĩa thiết bị tại đường dẫn /home/dev/sda là bất hợp pháp).
  • exec/noexec: cho phép hoặc không cho phép thực thi một tập tin có quyền exec trên thiết bị này.
  • suid/nosuid: cho phép hoặc không cho phép các thao tác với các bit suid hoặc sgid
  • ro: thiết bị ở dạng chỉ đọc.
  • rw: thiết bị ở dạng đọc và ghi.
  • user: cho phép người dùng có thể gắn kết ổ này, tùy chọn này sẽ tự động thực thi các tùy chọn rw, suid, exec, auto, nouser và async
  • nouser: chỉ cho phép người dùng root gắn kết ổ, tùy chọn này tương ứng với tùy chọn defaults.
  • defaults: bao tương ứng với các tùy chọn rw, suid, dev, exec, auto, nouser, async.
  • _netdev: đây là một thiết bị mạng, chỉ thực hiện gắn kết sau khi khởi động card mạng. Chỉ có hiệu lực với các định dạng nfs và fstype.
Dump: bật hoặc tắt chế độ backup cho ổ đĩa, có giá trị là 0 - tắt hoặc 1 - bật.
Pass: định nghĩa thứ tự để ứng dụng fsck kiểm tra thiết bị nếu gặp lỗi trong quá trình khởi động, thường sẽ là 2, 1 chỉ nên dùng cho phân vùng root, 0 có nghĩa là tắt
Dưới đây là một ví dụ về nội dung tập tin fstab:

# /etc/fstab: static file system information.
#
#                

proc  /proc  proc  defaults  0  0
# /dev/sda5
UUID=be35a709-c787-4198-a903-d5fdc80ab2f8  /  ext3  relatime,errors=remount-ro  0  1
# /dev/sda6
UUID=cee15eca-5b2e-48ad-9735-eae5ac14bc90  none  swap  sw  0  0

/dev/scd0  /media/cdrom0  udf,iso9660  user,noauto,exec,utf8  0  0
Và đây là một ví dụ về tập tin fstab quản lý một thiết bị mạng:
# FAT ~ Linux calls FAT file systems vfat)
# /dev/hda1
UUID=12102C02102CEB83  /media/windows  vfat auto,users,uid=1000,gid=100,dmask=027,fmask=137,utf8  0  0

# NTFS ~ Use ntfs-3g for write access (rw) 
# /dev/hda1
UUID=12102C02102CEB83  /media/windows  ntfs-3g  auto,users,uid=1000,gid=100,dmask=027,fmask=137,utf8  0  0

# Zip Drives ~ Linux recognizes ZIP drives as sdx'''4'''

# Separate Home
# /dev/sda7
UUID=413eee0c-61ff-4cb7-a299-89d12b075093  /home  ext3  nodev,nosuid,relatime  0  2

# Data partition
# /dev/sda8
UUID=3f8c5321-7181-40b3-a867-9c04a6cd5f2f  /media/data  ext3  relatime,noexec  0  2

# Samba
//server/share  /media/samba  cifs  user=user,uid=1000,gid=100  0  0
# "Server" = Samba server (by IP or name if you have an entry for the server in your hosts file
# "share" = name of the shared directory
# "user" = your samba user
# This set up will ask for a password when mounting the samba share. If you do not want to enter a password, use a credentials file.
# replace "user=user" with "credentials=/etc/samba/credentials" In the credentials file put two lines
# username=user
# password=password
# make the file owned by root and ro by root (sudo chown root.root /etc/samba/credentials && sudo chmod 400 /etc/samba/credentials)

# NFS
Server:/share  /media/nfs  nfs  rsize=8192 and wsize=8192,noexec,nosuid
# "Server" = Samba server (by IP or name if you have an entry for the server in your hosts file
# "share" = name of the shared directory

#SSHFS
sshfs#user@server:/share  fuse  user,allow_other  0  0
# "Server" = Samba server (by IP or name if you have an entry for the server in your hosts file
# "share" = name of the shared directory