จำนวนการเปิดอ่าน 928
คะแนนเอกสาร

ข้อดีอย่างนึงที่ผมจำเป็นต้องใช้ XFS format คือ มันสามารถตั้ง quota ให้กับ directory ได้โดยตรง กล่าวคือ มันไม่สนใจว่า จะมีกี่ user ที่เข้ามาใช้งาน directory นั้น แต่แค่ขนาด directory ถึงจำนวนที่กำหนด ก็เต็ม เท่านั้นเอง ง่ายๆ (ทำไม user quota มันไม่ทำแบบนี้ด้วย ก็ไม่เข้าใจ เห็นถามหากันว่อนในอินเตอร์เน็ต)

เริ่มต้นด้วยการติดตั้ง xfs ก่อน ด้วยคำสั่ง

apt-get install xfs xfsprogs

จากนั้นก็ ติดตั้ง hdd เข้าไป ถ้าใช้ hdd ที่ติดตั้งแล้ว ก็ข้ามขั้นตอนนี้ ไปได้เลย

fdisk  /dev/sdb
root@test:~# fdisk  /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xf2c47ef8.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf2c47ef8

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf2c47ef8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20971519    10484736   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

จากนั้นก็ format ให้เป็น XFS ด้วยคำสั่งนี้

mkfs.xfs -L media /dev/sdb1
root@test:~# mkfs.xfs -L media /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=655296 blks
         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=4096   blocks=2621184, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

จากนั้นก็ mount

mkdir -p /data/storage
mount -t xfs /dev/sdb1 /data/storage
root@test:~# df -h
Filesystem                                              Size  Used Avail Use% Mounted on
rootfs                                                  7.6G  1.1G  6.1G  15% /
udev                                                     10M     0   10M   0% /dev
tmpfs                                                   101M  244K  101M   1% /run
/dev/disk/by-uuid/1767448b-dec8-4373-b650-48b03ef3ab7d  7.6G  1.1G  6.1G  15% /
tmpfs                                                   5.0M     0  5.0M   0% /run/lock
tmpfs                                                   278M     0  278M   0% /run/shm
/dev/sdb1                                                10G   33M   10G   1% /data/storage

เป็นอันเสร็จขั้นตอนการติดตั้ง XFS Format ขั้นถัดไปจะเป็นเรื่องการใช้งาน quota ที่ผมต้องการจะใช้


การใช้ project quota ใน XFS

เริ่มแรกเลย umount ตะกี้นี้ทิ้งไปก่อน ด้วยคำสั่ง

umount /data/storage

แล้ว mount มันใหม่ด้วย option pquota ด้วยคำสั่งนี้

mount -o pquota /dev/sdb1 /data/storage

จากนั้น ตั้งหมายเลข project ลงไปใน ไฟล์ /etc/projects ด้วยคำสั่งแบบนี้

echo 1:/data/storage/000001 >> /etc/projects

แล้วก็ ทำย้อนกลับ เพื่อระบุว่า project ชื่อไหนหมายเลขอะไรด้วยคำสั่งนี้

echo s000001:1 >> /etc/projid

ณ จุดนี้ จะสรุปได้ว่า ผมสร้างโปรเจคชื่อ s000001 ให้มีหมายเลข 1 และมี พาร์ทอยู่ที่ /data/storage/000001

(ซึ่งจริงๆ ผมก็งงว่า มันจะแยกไฟล์มาทำไม ก็กำหนดแนวๆ 1:s000001:/data/storage/000001 ไปเลยก็ได้หรอกมั้ง แต่เค้าก็คงออกแบบมาไว้ดีแล้วล่ะ ถึงทำแบบนี้)

ตอนนี้เราก็ได้ poject เรียบร้อยแล้ว จากนั้น ก็เริ่มกำหนด quota ให้มันด้วยคำสั่งนี้

xfs_quota -x -c 'project -s s000001' /data/storage
root@test:~# xfs_quota -x -c 'project -s s000001' /data/storage
Setting up project s000001 (path /data/storage/000001)...
Processed 1 (/etc/projects and cmdline) paths for project s000001 with recursion depth infinite (-1).

ที่นี้ก็จำกัด quota ให้ projects ด้วยคำสั่งนี้ (สมมุติว่า จำกัดไว้ 100M นะครับ)

xfs_quota -x -c 'limit -p bhard=100m s000001' /data/storage

พอเราดู report ก็จะเห็นเป็นแบบนี้

xfs_quota -x -c 'report -h' /data/storage
root@test:~# xfs_quota -x -c 'report -h' /data/storage
Project quota on /data/storage (/dev/sdb1)
                        Blocks
Project ID   Used   Soft   Hard Warn/Grace
---------- ---------------------------------
s000001         0      0   100M  00 [------]

เท่านี้ ก็เรียบร้อยแล้ว ให้ลองทดสอบใส่ไฟล์ลงไปว่า มันจะจำกัดได้จริงรึป่าว ... จบครับ