Life would be so much simple if we don't care so much

Sau khi tạo partition bằng lệnh fdisk trên ổ cứng external (external hard disk), thì dùng mkfs để khởi tạo file hệ thống.
Cuối cùng để sử dụng được thì sẽ thực hiện mount ổ cứng vào.

1. mount là gì?

Cấu trúc thư mục của Linux là cấu trúc cây thư mục (tree) và được bắt đầu ở root trên cùng gọi là /root directory nhưng việc đăng ký cho 1 thiết bị lưu trữ gắn vào 1 điểm chỉ định trên cây thư mục của Linux được gọi là mount. Điểm được mount vào có thể được gọi là điểm mount.

2. format của lệnh mount

mount -t <type> -o <option> <device file> <mount point>
Các option hữu ích
-t type chỉ định device mount của file hệ thống
-o option chỉ định flag cho phép readonly hoặc readable

Set device file, chẳng hạn như /dev/sdb1
Set mount point, vd như /mnt/diskA
Nếu option bỏ trống thì khi thực thi sẽ hiển thị file hệ thống đang được mount

Ở đây, chỉ giải thích về lệnh mount được dùng cho việc mount ổ cứng. Trong thực tế, vẫn còn nhiều option khác, không hẳn chỉ chỉ có option cho việc mount.

***Note

Về option -o

Có nhiều option, có thể chỉ định nhiều option bằng cách dùng 「, (dấu phẩy)」để chia các option ra

defaults mount với default option (rw, suid, dev, exec, auto, nouser, async)
rw mount ở read/write mode
suid enable SUID hay SGID
dev cho phép sử dụng các ký tự đặc biệt, device and block, special device trên file hệ thống.
exec cho phép thực thi trên binary
auto nếu option -a được chỉ định, ổ cứng sẽ auto mount
nouser người dùng thông thường (không phải super user) thì không được phép thực thi lệnh mount
async đối với file hệ thông thì mọi I/O sẽ được tiến hành không đồng bộ
ro mount với readonly
nosuid SUID cũng như SGID bị disable
nodev các ký tự, ký tự đặc biệt, device block, special device…sẽ không sử dụng được
noexec không được phép trực tiếp execute binary
noauto nếu option -a được chỉ định, ổ cứng sẽ không auto mount
user cho phép general user được quyền mount ổ cứng
users cho phép toàn bộ user đều có thể mount/unmount ổ cứng
remount mount lại 1 file hệ thống đang được mount
Khi muốn thay đổi mount và option thì vd, khi muốn set write permission cho readonly thì mount và sửa lại.
※Ngoài ra vẫn còn 1 số option khác

3. Cách dùng lệnh mount

Thử mount partition /dev/sdb5 vào subdirectory /mnt/diskA

# mount -t ext4 -o defaults /dev/sdb5 /mnt/diskA/ ← mount
partition đã mount hay chưa có thể confirm như lệnh dưới đây

# mount -t ext4 ← ở ext4 hiển thị danh sách file hệ thống đang được mount
/dev/mapper/vg_sandbox1-lv_root on / type ext4 (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sdb5 on /mnt/diskA type ext4 (rw) ← mount ở ext4
1 khi đã mount vào thì có thể sử dụng như 1 directory thông thường

4. Mount sau khi khởi động lại OS 

Sau khi khởi động lại OS thì việc mount lại file hệ thống thì trước đó đã được ghi sẵn ở /etc/fstab
Chẳng hạn, sau khi khởi động, thì partition /dev/sdb5 mount vào sub directory /mnt/diskA sẽ được ghi thêm như dưới đây

/dev/sdb5 /mnt/diskA ext4 defaults 0 0
Về /etc/fstab
Hãy xem thử nội dung file hệ thống fstab

# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Aug 13 09:25:19 2013
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_sandbox1-lv_root / ext4 defaults 1 1
UUID=b5bc792e-4c30-48a5-bd1a-f071192d5573 /boot ext4 defaults 1 2
/dev/mapper/vg_sandbox1-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0

Thông tin mount của mỗi file hệ thống sẽ lần lược được viết từng dòng vào file fstab. Mỗi field của dòng sẽ được cách bởi space, chia nhau ra bởi TAB.
Thêm vào đó, chương trình dùng để đọc file fstab chẳng hạn như fsck(*) mount, unmount thì sẽ đọc từ đầu xuống theo thứ tự từ top nên thứ tự của record (file hệ thống) được ghi lại bên trong fstab thì khá quan trọng.

Thông tin các field
Field thứ 1: device file muốn mount
eg: /dev/sdb5
Có thể chỉ định UUID và volume label. LABEL=Boot、UUID=3e6be9de-8139-11d1-9106-a43f08d823a6
Field thứ 2: ghi lại info mount point của file hệ thống
eg: /mnt/diskA
Filed thứ 3: ghi type của file hệ thống
eg: ext3, ext4, iso9660, nfs …vv
Filed thứ 4: ghi mỗi mount option của mỗi file hệ thống. Trường hợp có nhiều option thì dùng , (dấu phẩy) để phân tách
Field thứ 5: ghi vào nếu file hệ thống có cần thiết dùng dump command hay không. 1=need, 0=no need. Nếu không ghi gì xem như là không cần thiết
Field thứ 6: fsck được tham chiếu khi quyết định các thứ tự thực thi kiểm tra file hệ thống trong thời gian boot
File root hệ thống thì cần được ghi là 1, ngoài ra thì với các partition khác thì sẽ ghi là 2
Nếu ghi là 0 thì dựa theo fsck được xem như là không cần thiết.

Note ***

Label là gì?
Label là name mà user sẽ gắn vào để định danh cho 1 thiết bị lưu trữ như ổ đĩa cứng.

Khi thực thi mkfs thì có thể dùng -L cho option để chỉ định label name, với lệnh e2label thì có thể gắn label name cho volume.
eg
# mkfs -t ext4 -L hdd1 /dev/sdb5 ← ở /dev/sdb5 thì hdd1 là label name
hoặc
# e2label /dev/sdb5 hdd1 ← ở /dev/sdb5 thì hdd1 là label name

Cách nào cũng có thể gắn label name được.

Cách confirm label

Có thể dùng lênh e2label để confirm label
eg
# e2label /dev/sdb5
hdd1  ←label của /dev/sdb5

Để mô tả 1 file system đã được gắn label thì có thể viết như sau

LABEL=hdd1 /mnt/diskA ext4 defaults 0 0

***Note

UUID là gì?

UUID là ID dùng để quản lý và định danh thiết bị. Không hẳn là quản lý để khỏi bị duplicate nhưng nó hiện diện như 1 unique Id duy nhất để định danh cho thiết bị, ổ cứng cũng được gán UUID.
Để xác định UUID của ổ cứng, có thể dùng lệnh blkid

eg

# blkid
/dev/sda1: UUID=”b5bc792e-4c30-48a5-bd1a-f071192d5573″ TYPE=”ext4″
/dev/sda2: UUID=”50KmAJ-A2Le-xYiK-ag0P-sQgb-bZXI-rWa21g” TYPE=”LVM2_member”
/dev/sdb5: LABEL=”hdd1″ UUID=”8b976773-def1-4a70-acc1-6284f53cf230″ TYPE=”ext4″
↑ label: /dev/sdb5, có thể biết UUID và Type

/dev/mapper/vg_sandbox1-lv_root: UUID=”fa117ec8-70ec-4fc5-bff2-f74bbe58b972″ TYPE=”ext4″
/dev/mapper/vg_sandbox1-lv_swap: UUID=”38037ae3-a844-487b-8b49-98d98cff0b69″ TYPE=“swap”

UUID sẽ được ghi lại sẵn ở fstab, trường hợp chẳng hạn như thay đổi kết nối ổ cứng về mặt vật lý hay khi thêm vào thiết bị thì tên thiết bị sẽ bị thay đổi (vd như khi đổi sda1 thành sdb1) thì record đã được ghi lại ở fstab sẽ được chỉ định chọn. Trường hợp tên thiết bị được ghi lại ở fstab, nếu tên thiết bị thay đổi thì cũng có trường hợp sẽ không khởi động như bình thường được.

(*)
The system utility fsck (file system consistency check) is a tool for checking the consistency of a file system in Unix and Unix-like operating systems, such as Linux and macOS.[1] A similar command, CHKDSK exists in Microsoft Windows.

Tham khảo

 

Advertisements

Để sử dụng được ổ cứng expand thì cần phải tạo partition và tạo file hệ thống trên partition đó.
Ở bài này sẽ nói về các loại file hệ thống có thể dùng trên Linux cũng như cách tạo file hệ thống trên partition.

1. Các loại file hệ thống

File hệ thống là 1 cơ chế dùng để quản lý các thuộc tính data như file name, created date, updated date…trên thiết bị lưu trữ, chẳng hạn như ổ cứng và quản lý bản thân data file đó, tuỳ theo OS mà các file hệ thống được sử dụng sẽ khác nhau.
Trường hợp Linux thì tuỳ theo các bản phân phối khác nhau mà file hệ thống sẽ khác nhau nhưng ext3, ext4 thì thường được sử dụng nhiều.

Các file hệ thống được sử dụng trên Linux
Filename        Maximum file size        Description
ext2                 2TB                                  Là file hệ thống được sử dụng phổ biến ở hệ điều hành Linux và được mở rộng từ file hệ thống ext.
ext3                 16GB~2TB                     Là ext2 được thêm vào chức năng hệ thống journaling. Ở Linux thì đây là phần chính của file hệ thống. Sớm có thể nhận biết khoảng thời gian từ 12/14/1901 đến 1/18/2038
ext4                 16TB                                 Hỗ trợ max volume size là 1EB và max file size là 16TB. Hỗ trợ date range từ 12/14/1901 đến 4/24/2514, trong thời gian system run có thể dùng.
Timestamp được support đến nanosecond, có thể sau này phần chính của file hệ thống sẽ reponse tốt hơn so với ext3.
ReiserFS         16TB                                 Chức năng journaling file hệ thống để handle các file nhỏ. Có thể là sẽ dùng được với SUSE.
Ngoài ra còn 1 số loại file khác nhưng phần chính có lẽ nằm ở top bảng thông tin.

2. Khởi tạo file hệ thống
Dùng lênh mkfs để tạo file hệ thống

Format
mkfs [option] Device name (partition)
1 số option thường dùng
-t Chỉ định type cho file hệ thống. Nếu không chỉ định type thì mặc định sẽ dùng là ext2
-c Trước khi tạo file hệ thống thì sẽ tiến hành check bad block.

Chúng ta sẽ thử 1 số sample tạo file hệ thống

# mkfs -t ext4 /dev/sdb1
↑ File hệ thống là ext4。Format partition /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
66384 inodes, 265064 blocks
13253 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=272629760
9 block groups
32768 blocks per group, 32768 fragments per group
7376 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

***Notes

mkfs chỉ là front-end program. Thực tế sẽ run những lệnh sau (mkfs.ext2、mkfs.ext3、mkfs.ext4) nên có thể tạo file hệ thống bằng cách run trực tiếp các command này.

# ls -l /sbin/mkfs*
-rwxr-xr-x. 1 root root 7416 4月 29 16:41 2013 /sbin/mkfs
-rwxr-xr-x. 1 root root 22476 4月 29 16:41 2013 /sbin/mkfs.cramfs
-rwxr-xr-x. 5 root root 61072 6月 25 17:49 2013 /sbin/mkfs.ext2 ← ext2用mkfs
-rwxr-xr-x. 5 root root 61072 6月 25 17:49 2013 /sbin/mkfs.ext3 ← ext3用mkfs
-rwxr-xr-x. 5 root root 61072 6月 25 17:49 2013 /sbin/mkfs.ext4 ← ext4用mkfs
-rwxr-xr-x. 5 root root 61072 6月 25 17:49 2013 /sbin/mkfs.ext4dev
lrwxrwxrwx. 1 root root 7 8月 3 16:02 2013 /sbin/mkfs.msdos -> mkdosfs
lrwxrwxrwx. 1 root root 7 8月 3 16:02 2013 /sbin/mkfs.vfat -> mkdosfs

Cách dùng cũng đơn giản, chỉ cần chỉ định partition sau command là được.

# mkfs.ext4 /dev/sdb1 ← chỉ định tên thiết bị của partition cho command
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
66384 inodes, 265064 blocks
13253 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=272629760
9 block groups
32768 blocks per group, 32768 fragments per group
7376 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

Tham khảo nguồn

Ở Linux, lệnh fdisk được sử dụng để quản lý các partition của ổ cứng. Với fdisk thì có thể tạo và xoá các phân vùng ổ đĩa, cũng như check được thông tin các partition.

Ở bài này, sẽ giải thích về cách tạo partition trên extended hard-disk.

1. Tạo phân vùng mới
Tạo partition bằng cách run fdisk và pass vào parameter là tên của device (ổ cứng) muốn tạo partition

eg1

# fdisk /dev/sdb
command fdisk là command dạng menu format
Sau khi run command, từ menu trong khi vừa chọn 1 số xử lý, việc tạo partition sẽ được tiếp tục.
Nếu nhập vào「m」thì sẽ hiển thị help

eg2 (fyi EN)
[root@70c8dcd1d9f7 /]# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help):

(JPN)

# fdisk /dev/sdb
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

コマンド (m でヘルプ): m  ← input vào m
コマンドの動作
a ブート可能フラグをつける
b bsd ディスクラベルを編集する
c dos 互換フラグをつける
d 領域を削除する
l 既知の領域タイプをリスト表示する
m このメニューを表示する
n 新たに領域を作成する
o 新たに空の DOS 領域テーブルを作成する
p 領域テーブルを表示する
q 変更を保存せずに終了する
s 空の Sun ディスクラベルを作成する
t 領域のシステム ID を変更する
u 表示/項目ユニットを変更する
v 領域テーブルを照合する
w テーブルをディスクに書き込み、終了する
x 特別な機能 (エキスパート専用)

(fyi EN)
Command (m for help): m ← input vào m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition’s system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

***Note
Có message khi thực thị của command nhưng dùng w để write nội dung thay đổi.
Cho tới khi nội dung thay đổi được write thì mọi thay đổi sẽ không được apply.

Khi tạo phân vùng mới thì cũng như help command, input vào n

コマンド (m でヘルプ): n  ← input vào n
コマンドアクション
e 拡張
p 基本領域 (1-4)

(fyi EN)
Command (m for help): n ← input vào n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended

Muốn tạo phân vùng extended hay là phân vùng chính thì chọn bằng cách input vào.

***Note
Chỉ có thể chia tới 4 partition trên ổ cứng. (vượt quá 4 là không thể)
Khi chia partition thì sẽ có phân vùng chính hoặc phân vùng mở rộng, nếu chia phân vùng mở rộng thì ứng với 1 ổ cứng chỉ có thể tạo được 1 phân vùng mở rộng. Nếu tạo 4 phần của partition đều là phân vùng chính, thì sẽ không tạo được phân vùng mở rộng.
Với phân vùng mở rộng, do có thể tạo được các partition logic nên trường hợp cần nhiều partition thì sẽ rất cần tới phân vùng mở rộng.

Số lượng partition tối đa

IDE :63 (primary 3 + logic 60)
SATA:15 (primary3 + logic 12)
SCSI:15 (primary3 + logic 12)

Ở đây, chúng ta sẽ tạo thử phân vùng primary 1GB

コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p ← Lần này chúng ta sẽ tạo phân vùng primary nên sẽ input vào p

領域番号 (1-4): 1 ← Do lần đầu tiên tạo partition trên disk này nên sẽ nhập 1

最初 シリンダ (1-652, default 1): 1 ← Đây là partition đầu tiên trên disk nên sẽ input 1 cho head cylinder
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-652, default 652): +1024M
※ Ở đây, với 1 partition thì cần chỉ định size đảm bảo cho ổ cứng. Lần này là chia 1 GB

Input vào p thì có thể check được trạng thái partition hiện tại

コマンド (m でヘルプ): p  ← input vào p

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sdb1 1 125 1004031 83 Linux ← partition mới được tạo

2. Thay đổi systemID của phân vùng

Ở đây chúng ta sẽ quyết định loại file system nào sẽ apply khi chia partition mới.
Nếu định dùng file system ext3 và ext4 thì không cần phải làm việc này.
Chẳng hạn như khi thay đổi vùng mở rộng (Extended area) hoặc phân vùng dùng cho LVM … thì ở đây chúng ta sẽ thay đổi system ID.
Để check danh sách các phân vùng system ID thì presss l (chữ nhỏ của L)

(JPN)
マンド (m でヘルプ): l ← input l

0 空 24 NEC DOS 81 Minix / 古い bf Solaris
1 FAT12 39 Plan 9 82 Linux スワッ c1 DRDOS/sec (FAT-
2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 40 Venix 80286 84 OS/2 隠し C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 41 PPC PReP Boot 85 Linux 拡張領 c7 Syrinx
5 拡張領域

Tham khảo nguồn

Ở Linux, lệnh fdisk được sử dụng để quản lý các partition của ổ cứng. Với fdisk thì có thể tạo và xoá các phân vùng ổ đĩa, cũng như check được thông tin các partition.

Ở bài này, sẽ giải thích về cách tạo partition trên extended hard-disk. Ngoài ra, cũng sẽ chỉ ra cách check device name của hard-disk và cách kiểm tra thông tin partition.

1. Format của lệnh fdisk

Lệnh fdisk có thể sử dụng để tạo và xoá các partition của hard-disk hoặc là check thông tin partition của ổ cứng.

Format của fdisk
fdisk [option] [device file]

Các option thường dùng
-l (chữ nhỏ của L) liệt kê danh sách partition table của device được chỉ định. Nếu không chỉ định device nào thì các partition (nếu có) trong /proc/partitions sẽ được liệt kê.

Nếu run fdisk và gắn thêm option -l thì sẽ confirm được thông tin các partition. Nếu chỉ định device name mà ko kèm option -l thì màn hình sẽ được switch sang màn hình menu dành cho việc khởi tạo partition.
Device file sẽ nằm ở dưới thư mục /dev. Tên device của extended hard-disk thì có thể confirm bằng cách run fdisk với option -l, hoặc check với lệnh dmesg, nếu là IDE disk thì có device name là dev/hd[a-h], nếu là disk SCSI, SATA disk thì sẽ có device name là /dev/sd[a-p]

2. Check device name của extended hard-disk

Để tạo partition khi run lệnh fdisk cần phải pass vào device name của extended hard-disk

Run fdisk với option -l sẽ hiển thị thông tin partion của hard-disk mà system đang nhận biết được.
Nếu check cấu trúc của hard-disk trước khi được mở rộng thì sẽ dễ phân biệt được phần extend thêm vào sau này.

# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes   ←device name của disk1 là /dev/sda
255 heads, 63 sectors/track, 1044 cylinders
Units = số vòng quay 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1044 8281507+ 8e Linux LVM

Disk /dev/sdb: 5368 MB, 5368709120 bytes   ←device name của disk2 là /dev/sdb
255 heads, 63 sectors/track, 652 cylinders
Units = số vòng quay 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn’t contain a valid partition table

Từ kết quả của lệnh fdisk sẽ biết được device name của các hard-disk đang được kết nối là /dev/sda và /dev/sdb
Trước khi run lệnh này, đang thêm vào 5GB ổ cứng. Từ size sẽ biết được tên của thiết bị của extended hard-disk.
Nếu thông tin partition không có gì thì cũng sẽ biết được hard-disk đã được add thêm vào.
Thực tế là khi tạo partition thì cần phải có device name.

Sử dụng fdisk -l trường hợp không thể hiển thị được gì.
Nếu dùng fdisk -l mà không hiển thị được gì thì cũng có thể dùng dmesg, cũng là 1 command dùng để check info.

# dmesg | grep hd
ide0: BM-DMA at 0x10c0-0x10c7, BIOS settings: hda:pio, hdb:pio
ide1: BM-DMA at 0x10c8-0x10cf, BIOS settings: hdc:DMA, hdd:pio
hdc: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
SCSI device sda: 16777216 512-byte hdwr sectors (8590 MB)   ←device name = sda
SCSI device sda: 16777216 512-byte hdwr sectors (8590 MB)   ←device name = sda
SCSI device sdb: 10485760 512-byte hdwr sectors (5369 MB)   ←device name = sdb, size ~ 5GB
SCSI device sdb: 10485760 512-byte hdwr sectors (5369 MB)   ←device name = sdb, size ~ 5GB
hdc: ATAPI 1X DVD-ROM DVD-R-RAM CD-R/RW drive, 32kB Cache, UDMA(33)
hdc: drive_cmd: status=0x51 { DriveReady SeekComplete Error }
hdc: drive_cmd: error=0x04 { AbortedCommand }

Hiện tại, tên thiết bị đang được sử dụng thì nếu dùng lệnh df có thể hiển thị được. Cái mà chưa sử dụng là tên device của hard disk đã add thêm

# df
Filesystem 1K-block use can user use% vị trí mount
/dev/mapper/VolGroup00-LogVol00
5967432 4154316 1505152 74% /
/dev/sda1 101086 12279 83588 13% /boot
↑ Hiện tại tên device của ổ cứng đang được dùng là /dev/sda (hiển thị số đại diện cho partition)
tmpfs 517552 0 517552 0% /dev/shm

3. Thông tin partition của hard disk

Run fdisk -l và pass vào thông tin device name

# fdisk -l /dev/sda

Disk /dev/sda: 8589 MB, 8589934592 bytes ← size ổ cứng của sda
255 heads, 63 sectors/track, 1044 cylinders Units = số vòng quay of 16065 * 512 = 8225280 bytes
↑ Header, number of sectors per track, number of cylinders

Disk Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux ← Partition 1
/dev/sda2 14 1044 8281507+ 8e Linux LVM ← Partition 2
Từ kết quả của command có thể biết được size ổ cứng của /dev/sda
Ngoài ra còn biết được header, number of sectors per track, number of cylinders

Mỗi partition thì sẽ tương ứng 1 tên thiết bị (device name). Trường hợp này, device name của partition 1 là /dev/sda1, device name của partition 2 là /dev/sda2

Tham khảo nguồn

Ở bài này sẽ mô tả về sử dụng hard disk trên Linux

Partition là gì?

Có thể chia ổ cứng (hard disk) ra thành nhiều các phân vùng logic (partition) và mỗi partition đó sẽ được sử dụng như 1 hard disk.
Nếu phân chia partition theo mục đích chẳng hạn như tách partition chuyên dụng cho data, partition chuyên dụng cho system…thì sẽ có nhiều lợi điểm khác nhau như việc backup và update system sẽ trở nên dễ dàng hơn, thậm chí khi data bị overflow thì cũng không dẫn đến kết nối hệ thống bị đình chỉ, hoặc có thể cứu được data trong trường hợp hệ thống bị crash…
Điểm bất lợi là việc phải tính toán trước khả năng disk (kích thước) cho cấu trúc hệ thống thì khá là phức tạp và cả việc cập nhật sau đó cũng là vấn đề khó khăn.
Trên Linux để tạo các partition trên ổ cứng thì có thể sử dụng lệnh fdisk

File system là gì?

File system là cơ chế để quản lý các thuộc tính dữ liệu như file name, date update… được lưu trữ trong vùng nhớ của ổ cứng.
File system có nhiều loại khác nhau, chẳng hạn ở Windows thì có định dạng FAT32 và NTFS, trên Linux thì có ext2, ext3, gần đây thì có ext4, trên CD thì có iso9660 và rất nhiều loại định dạng dữ liệu khác nữa.
Tuỳ thuộc vào file hệ thống được sử dụng mà kích thước tối đa của 1 file, số ký tự tên file, hiệu quả truy cập, security, file compression… có rất nhiều chức năng khác nhau nhưng khi sử dụng hard disk thì tối thiểu trên partition cần thiết phải tạo các file hệ thống.
Ở Linux, để tạo các file hệ thống trên partition thì có thể dùng command mkfs

Mount là gì?

Cấu trúc của directory trong Linux được gọi là /root directory tương tự như cấu trúc tree bắt đầu từ trên top(root) của directory. Khi thiết bị lưu trữ kết nối với máy tính thì chúng ta sẽ làm cho thiết bị lưu trữ này thực hiện chức năng như 1 directory nằm trên cấu trúc tree của directory hệ thống.
Mount tức là việc thiết bị lưu trữ kết nối với máy đăng ký truy cập vào 1 điểm trên cấu trúc tree directory này.
Để mount file system thì sử dụng command mount

***Note
Khi mount disk vào bên trong directory đã có content thì content cũng sẽ bị replace cho dù directory đã được mount vào là /directory, lúc này thì sẽ không thể đọc hoặc ghi nội dung bên trong directory trước đó được nữa.

***Note
Về cấu trúc directory của Linux

Cấu trúc directory của Linux được tạo ra theo chuẩn được gọi là FHS(Filesystem Hierarchy Standard), cấu trúc này được mô tả như dưới đây.

Root directory

Ở directory nào đặt vào những file như thế nào để chuẩn hoá, rất nhiều các bản phân phối mà file đã được sắp xếp sẵn theo chuẩn.
Để biết được với mỗi directory thì sẽ đặt những file như thế nào thì có thể xem mô tả dưới đây.

/usr các loại file mà user install độc lập /có 1 cấu trúc tương tự trực tiếp bên dưới
/bin các chương trình của general user
/boot các file liên quan đến khởi động hệ thống
/dev directory, device file
/etc file setting
/lib các library common được sử dụng bởi nhiều chương trình trong hệ thống
/var các data thay đổi thường xuyên (log, db, web …)
/sbin chương trình quản lý system
/tmp file tạm

Tham khảo nguồn

Khi tạo mới 1 thư mục hoặc 1 file thì có lẽ mọi quyền truy cập sẽ là như nhau. umask là 1 cơ chế để thiết lập quyền truy cập file default cho file và thư mục.

1. Check giá trị umask

Sau khi đã hoàn tất login vào OS thì umask đã được thiết lập sẵn. Bởi vì trong file /etc/bashrc (là file được execute khi login vào OS) đã có 1 descriptor dùng để assign giá trị umask cho user.
Để check giá trị umask hiện tại có thể run command umask mà không cần chỉ định option

$ umask
0002
Giá trị umask hiện tại đang là 0002 (ý nghĩa của giá trị này sẽ giải thích sau)

Nếu chỉ định option「-S」thì có thể confirm được quyền truy cập default của thư mục dưới dạng symbol mode

$ umask -S
u=rwx,g=rwx,o=rx
***Note

Đối với từng account thì giá trị umask sẽ được thiết lập.

2. Setting umask

Để setting umask thì ở lệnh umask sẽ viết giá trị umask và run

vd: Trong trường hợp set giá trị umask thành 0022
$ umask
0002 ← giá trị hiện tại 0002

$ umask 0022 ← set umaskt thành 0022

$ umask
0022 ← giá trị umask bây giờ là 0022

3. Cách tính umask

Dựa theo option mà cách thức tính giá trị umask sẽ được giải thích ở phần này.
Đối với file và folder thì cách tính toán sẽ khác nhau nhưng xác định được bạn muốn quyền truy cập default sẽ như thế nào thì có thể setting được.

Bạn có thể tính umask value bằng cách trừ đi giá trị quyền truy cập default từ 666 (đối với file) và 777 (đối với thư mục) (Giá trị umask có 1 số ngoại lệ nên hãy tham khảo table thêm. Không thể assign được phân quyền cho giá trị inital của file.)

Trường hợp muốn set giá trị access default của file và thư mục là 755 thì làm như sau:

777-755=022

umask 022 hoặc umask 0022 thì phần numeric có thể được set trong 4 ký tự. Có thể set default quyền access của thư mục là 755

4. Bảng cheat umask

Đối với giá trị umask đã chỉ định, thì dưới đây là bảng so sánh giữa quyền truy cập của file và thư mục

umask value default access of directory default access of file
0 rwx rw-
1 rw- rw-
2 r-x r–
3 r– r–
4 -wx -w-
5 -w- -w-
6 –x —
7 — —

5. Chỉ định symbol mode cho umask

Có thể execute giá trị umask theo symbol mode dưới đây. Cũng giống như symbol mode của chmod

umask u=rwx,g=rwx,o=rx
memo

※ Phần execute authority của file được tạo sẽ bị ignored.

Các sample sử dụng
$ umask -S
u=rwx,g=rwx,o=rx  ← Phần Other ko set phân quyền cho quyền write

$ umask u=rwx,g=rwx,o=rwx ← Phần Other không được chỉ định rwx

$ umask -S
u=rwx,g=rwx,o=rwx  ← Phần Other đã trở thành rwx

$ mkdir dir
$ ls -l
drwxrwxrwx 2 user1 user1 4096 7月 30 09:21 dir ← Default quyền truy cập ở phần Other của directory trở thành rwx
$ umask u=rwx,g=rwx,o=rx  ← Phần Other thì w đã bị remove

$ umask -S
u=rwx,g=rwx,o=rx

$ umask
0002

$ mkdir dir2
$ ls -l
drwxrwxr-x 2 user1 user1 4096 7月 30 09:21 dir2 ← Phần Other thì w đã bị remove
symbol mode của umask hay cũng giống như symbol mode của chmod thì có thể thêm hoặc xoá bớt ký tự

$ umask -S
u=rwx,g=rwx,o=rx

$ umask o+w  ← Phần Other thì w (quyền write) được thêm vào

$ umask -S
u=rwx,g=rwx,o=rwx ← Phần Other thì w (quyền write) được thêm vào

Tham khảo 

Sticky Bit tức là quyền truy cập đặc biệt ở Linux. Ở bài này sẽ hướng dẫn về Sticky Bit

1. Sticky Bit là gì?

Sticky Bit là việc thưc mục được thiết lập quyền truy cập đặc biệt.
Directory được thiết lập Sticky Bit thì tất cả các user có thể write nhưng chỉ có owner (ngoại trừ root) mới được xoá.
Thư mục /tmp được thiết lập Sticky Bit.

2. Check Sticky Bit setting

Check Sticky Bit có đang được thiết lập hay không?
# ls -ld /tmp/
drwxrwxrwt 7 root root 4096 7月 29 04:02 /tmp/

Đối với account khác thì ở phần quyền execute sẽ là 「t」. Khi thiết lập Sticky Bit cho thư mục thì quyền execute sẽ hiển thị là 「t」

3. Thiết lập Sticky Bit

Dùng command chmod để setting Sticky Bit

Setting với Symbol mode
Để set Sticky Bit với symbol mode thì dùng command chmod và set authority cho Other là t

chmod o+t dir

Setting với Numeric mode
Để set Sticky Bit với numeric mode thì dùng thêm vào giá trị 1000 cho quyền truy cập

chmod 1777 dir
Thử confirm lại permission của thư mục trên

# ls -ld dir
drwxrwxrwt 2 root root 4096 7月 29 08:41 dir
Phần Other sẽ hiển thị quyền truy cập tương ứng với t, Sticky Bit đã được set