Leaderboard (728 x 90)

Tuesday, October 27, 2009

ext4 filesystem

1. Introduction

Ext4 วิวัฒนาการมาจากระบบไฟล์ของลีนุกซ์ที่ได้รับความนิยมมากที่สุดก็คือ Ext3
Ext3 นั้นมีจุดเด่นก็คือระบบไฟล์แบบ Journaling ที่เพิ่มเข้าไปใน Ext2
แต่ Ext4 ได้ปรับปรุงแก้ไขส่วนสำคัญในเรื่องของโครงสร้างของระบบไฟล์ อย่างเช่น
ได้มีการกำหนดพื้นที่ที่เก็บข้อมูลไฟล์ไว้ล่วงหน้า ทำให้ระบบไฟล์มีการจัดสรรพื้นที่เก็บข้อมูลที่ดีขึ้น
ประสิทธิภาพมากขึ้นรวมทั้งความน่าเชื่อถือและคุณสมบัติที่ดีขึ้นอีกด้วย

Note :
1. Ext4 ถูกนำมาใช้ใน kernel 2.6.28
2. Journaling หมายถึง เมื่อข้อมูลในระบบเสียหาย ไม่ต้องมีการใช้คำสั่ง fsck
เพื่อตรวจสอบและซ่อมแซมแฟ้มข้อมูลนั้น เพราะว่าการทำงานของ journaling
นั้นจะมีการกู้แฟ้มข้อมูลที่เสียหายขึ้นมาให้โดยอัติโนมัติ


2. EXT4 features

2.1 Large file system/file sizes
Ext3 รองรับพื้นที่ได้มากสุด 16 TB และขนาดของไฟล์ใหญ่ที่สุด 2 TB
แต่ Ext4 ได้มีการเพิ่ม block address เป็นขนาด 48-bit
ทำให้สามารถรองรับพื้นที่ได้ถึง 1 EB (= 1,048,576 TB)และขนาดของไฟล์ใหญ่ที่สุด 16 TB

1 EB = 1024 PB
1 PB = 1024 TB
1 TB = 1024 GB

แล้วเขายังตั้งคำถามต่ออีกว่า ทำไมไม่เป็น 64bit หละ?
เขาบอกว่ามันมีข้อจำกัดอยู่ซึ่งถ้าเป็นขนาด 64 bit แล้วจะมี address บางส่วนหายไป
ซึ่งผมลองคำนวณดูว่า Ext4 ขนาด 64bit นี้จะพื้นที่มากถึง 74,000EB เลยที่เดียว

Note :
ขนาดของบล็อค(block size) ใน Ext4 เท่ากับ 4KB


2.2 Sub Directory
ใน Ext3 มีไดเรกทอรีย่อย 32,000 ไดเรกทอรีย่อย
แต่ใน Ext4 สามารถมีไดเรกทอรีย่อยได้ถึง 64,000 ไดเรกทอรีย่อย

Note :
ตรงนี้บางแหล่งอ้างอิงบอกว่ามีได้ถึง 640,000 หรือบางแหล่งบอกว่ามีได้ไม่จำกัด


2.3 Extents (การเขียนไฟล์แบบใหม่ใน Ext4)
Extents เป็นการเขียนไฟล์แบบใหม่ที่เพิ่มเข้ามาใน Ext4 แทนที่ block mapping ใน Ext3
ซึ่ง Extents จะมีการจองพื้นที่ที่อยู่ติดกัน ก่อนที่จะเขียนไฟล์
ทำให้ไฟล์ที่มีขนาดใหญ่มีประสิทธิภาพมากขึ้นและช่วยลดการกระจายของข้อมูล

2.4 Multiblock allocation
ใน Ext3 เวลาที่มีการเขียนไฟล์ก็จะมีการจัดสรรพื้นที่ทีละบล็อค (only allocates one block)
ในแต่ละครั้งที่เขียนลงไฟล์ ก็คือว่าถ้ามีการเขียนไฟล์ขนาด 100MB
ก็จะมีการจัดสรรบล็อคในการเขียนไฟล์ 25,600 ครั้ง (block size = 4KB)
แต่ใน Ext4 ใช้ "multiblock allocator" (mballoc) ซึ่งจะมีการจัดสรรบล็อกได้ทีละหลายๆบล็อค
ในการเรียกเขียนไฟล์ใน1ครั้ง

2.5 delayed allocation
ในระบบไฟล์แบบเก่าจะมีการการจัดสรรพื้นที่ของบล็อคโดยทันทีเพื่อให้ข้อมูลถูกเขียนลงดิสก์
แต่ในบางครั้งข้อมูลอาจจะถูกเก็บไว้ที่แคช (cache)
ไม่ได้ถูกเขียนลงดิสก์จริงๆ มันก็จะเสียเวลาไปกับการ จัดสรรพื้นที่ของบล็อคไป

ใน Ext4 ใช้เทคนิคที่เรียกว่า allocate-on-flush หรือที่รู้จักกันในชื่อ delayed allocation
ซึ่งวิธีของ delayed allocation นี้ ถ้าเกิดมีการเขียนไฟล์ขึ้นมามันจะยังไม่จัดสรรพื้นที่ของบล็อคที่จะเขียนโดยทันที
จนกว่าข้อมูลนั้นจะถูกเขียนลงดิสก์จริงๆ จึงจะมีการจัดสรรพื้นที่ของบล็อค

2.6 Faster file system checking (Fast fsck)
เพิ่มความเร็วในการตรวจสอบและซ่อมแซมแฟ้มข้อมูลของระบบไฟล์
เหมือนกับ Scandisk บน window

(ภาพจาก kerneltrap.org)

2.7 Compatibility
ในระบบไฟล์ Ext3 สามารถเปลี่ยนไปเป็น Ext4 ด้วยวิธีง่ายๆเพียงแค่ 2 คำสั่ง
คือ tune2fs และ fsck (จะกล่าวถึงในหัวข้อที่ 3.2) นั่นก็หมายความว่าเราสามารถเพิ่มประสิทธิภาพ
เรื่องข้อจำกัดของพื้นที่ในการเก็บข้อมูล และคุณสมบัติที่เพิ่มขึ้นในระบบไฟล์ของเรา
โดยไม่ต้อง reformatting และ/หรือ reinstalling โปรแกรมและระบบปฏิบัติการ

และเขายังบอกอีกว่า เราสามารถอัพเกรดระบบไฟล์โดยที่ไม่ต้องเสี่ยงกับข้อมูลที่สูญหาย
(แต่เขาวงเล็บไว้ว่า "เพื่อความแน่ใจก็ควรจะ backup ข้อมูลสำคัญๆไว้แม้ว่าจะไม่ได้อัพเกรดระบบไฟล์ก็ตาม")

ตรงนี้สำคัญ : เมื่อเราเปลี่ยนระบบไฟล์จาก Ext3 ไปเป็น Ext4 ด้วยวิธีข้างต้นนี้ ครั้งหนึ่งแล้ว
เราจะไม่สามารถเปลี่ยนระบบไฟล์กลับไปเป็น Ext3 ได้เนื่องจาก Ext4 มีโครงสร้างของระบบไฟล์แบบใหม่
ถ้าเราเปลี่ยนกลับไปเป็น Ext3 ระบบจะแจ้งเตือนว่า "wrong fs type"
(แต่เราสามารถเปลี่ยนระบบไฟล์กลับมาเป็น Ext3 ได้อีกครั้งหนึ่งด้วยวิธี mount จะกล่าวถึงในหัวข้อที่ 3.3)

2.8 Improved timestamps
แก้ปัญหา Year 2038 problem ด้วยการเพิ่มไปอีก 2 bit ที่ timestamp field
ทำให้ขยายเวลาไปอีกกว่า 500 ปี

(ภาพแสดงปัญหาปี 2038)

2.9 Persistent preallocation
คุณสมบัตินี้ผมขออธิบายง่ายๆด้วยการไปเปรียบเทียบกับบน window นะครับ
ก็คือให้นึกถึงเวลาที่เราโหลดบิต (P2P applications) แม้ว่าเราจะโหลดไฟล์ยังไม่เสร็จก็ตาม
สมมติว่าโหลดไป 20% แต่การจองพื้นที่สำหรับการเขียนไฟล์ก็จองไป 100%
ซึ่งตรงนี้เป็นการจองพื้นที่แบบถาวรแม้ว่าเราจะปิดเครื่องไปแล้วมาโหลดต่ออีกวันหนึ่งก็ตาม
ใน linux ก็เหมือนกันตรงนี้จะมาช่วยลดการกระจายของข้อมูล

2.10 Online defragmentation (คุณสมบัตินี้กำลังอยู่ในช่วงพัฒนาและจะมาเพิ่มในอนาคต)
ถึงจะมี delayed allocation, extents และ multiblock allocation มาช่วยในการลดกระจายของข้อมูล
แต่บางทีก็ยังเกิดการกระจายของข้อมูลได้อยู่ ตรงนี้เขาเปรียบเทียบให้ดูว่า
ถ้าเราเขียนไฟล์ขึ้นมา 3 ไฟล์ลงบนดิสก์ แล้ววันหนึ่งต่อมาเรามาแก้ไขไฟล์ที่อยู่ตรงกลาง
แต่การแก้ไขนี้มันไปเพิ่มขนาดหรือจำนวนบิต ทำให้พื้นที่ตรงนั้นไม่พอ ไฟล์ที่เราแก้ไขจึงต้องไปอยู่อีกที่หนึ่ง
ซึ่งไม่อยู่ติดกับที่เหลืออีก 2ไฟล์เดิม

เพื่อแก้ไขปัญหานี้ใน Ext4 จึงมี e4defrag tool
ซึ่งสามารถจัดระเบียบของข้อมูลเฉพาะของไฟล์นั้นๆ หรือทั้งระบบก็ได้

2.11 Inode-related features
  • Larger inodes : เพิ่มขนาดของ inode เป็น 256 bytes ( จากของเดิม 128 bytes ใน Ext3 )
    เพื่อรองรับการเก็บ timestamps แบบ Nanoseconds
  • Inode reservation : เพิ่มการจองให้ inode เมื่อมีการสร้าง Directory (คาดว่าจะมีใช้ในอนาคต)
    เมื่อมีการสร้างไฟล์ใหม่ขึ้นมาใน Directory ระบบก็จะสามารถใช้ inode ตรงส่วนที่ถูกจองไว้ได้เลย
  • Nanoseconds timestamps : ที่ inode fields ในส่วนของ modified time จะเก็บ timestamps
    ในหน่วย nanosecond แทนที่หน่วย second ใน Ext3

Inode จะเก็บรายละเอียดต่างๆของไฟล์ เช่น
• การแสดงสิทธิต่าง ๆ ของไฟล์
• การบอกถึงชนิดของไฟล์
• แสดงถึงเจ้าของและกลุ่มเจ้าของไฟล์
• วันเวลาที่สร้างไฟล์ เปลี่ยนแปลงไฟล์ หรือการเข้าถึงไฟล์ (access file)
• จำนวนการเชื่อมโยงของไฟล์เชื่อมโยง


3. How to use Ext4

3.1 Creating a new Ext4 filesystem

$ mkfs -t ext4 /dev/filesystem

Or

$ mkfs.ext4 /dev/filesystem


3.2 Migrate existing Ext3 filesystems to Ext4
ในการอัพเกรดระบบไฟล์จาก Ext3 ไปเป็น Ext4 เราใช้เพียง 2 คำสั่งคือ tune2fs and fsck
แล้วก่อนทำอย่าลืม umount filesystem ก่อนนะครับ

tonhor@ubuntu:~# tune2fs -O extents,uninit_bg,dir_index /dev/filesystem

tune2fs 1.41.4 (27-Jan-2009)
Please run e2fsck on the filesystem.


tonhor@ubuntu:~# fsck -pDf /dev/filesystem

fsck 1.41.4 (27-Jan-2009)
/dev/sdb1: Group descriptor 0 checksum is invalid. FIXED.
/dev/sdb1: Group descriptor 1 checksum is invalid. FIXED.
/dev/sdb1: Group descriptor 2 checksum is invalid. FIXED.
/dev/sdb1: Group descriptor 3 checksum is invalid. FIXED.
/dev/sdb1: Group descriptor 4 checksum is invalid. FIXED.
[..]


3.3 Mount an existing Ext3 filesystem with Ext4 without changing the format
ถ้าเราต้องการให้ระบบไฟล์ของเราเปลี่ยนจาก Ext3 เป็น Ext4 แล้วสามารถเปลี่ยนกลับมาเป็น Ext3 ได้อีก
เราสามารถใช้การ mount ระบบไฟล์ Ext3 เป็น Ext4 ได้

tonhor@ubuntu:~# mount -t ext4 /dev/filesystem /mnt/ext3


และเปลี่ยนระบบไฟล์กลับมาเป็น Ext3 อีกครั้งด้วยการ mount
tonhor@ubuntu:~# mount -t ext3 /dev/filesystem /mnt/ext3

ที่มา: http://tonhor.exteen.com/20090502/what-is-ext4-ext4

Tuesday, October 13, 2009

Ext3 – Reserved blocks percentage

Get back your missing unused disk space

According to tune2fs manual, reserved blocks are designed to keep your system from failing when you run out of space. Its reserves space for privileged processes such as daemons (like syslogd, for ex.) and other root level processes; also the reserved space can prevent the filesystem from fragmenting as it fills up. By default this is 5% regardless of the size of the partition.

On large partitions (250GB drives and up are quite common these days), the default 5% reserved space can be quite a lot (12.5Gb in my example). For ext3 partitions you can tune this parameter by using tune2fs with the parameter -m. For ex. to decrease this to 3% you would run (for ex. on /dev/sda1):
tune2fs -m 3 /dev/sda1
You should be very careful when ‘playing’ with this parameter and be sure you know what you are doing before changing this value.

ที่มา: http://www.ducea.com/2008/03/04/ext3-re ... ercentage/
ที่มา: http://ubuntuforums.org/archive/index.p ... 60160.html

Saturday, October 3, 2009

Free Antivirus จาก Microsoft

รายงานข่าวล่าสุด ไมโครซอฟท์ (Microsoft) ยืนยันว่า จะเริ่มเปิดให้ดาวน์โหลดฟรี!!! สำหรับซอฟต์แวร์ "แอนตี้ไวรัส" (เวอร์ชันสมบูรณ์) ของทางบริษัทภายในวันนี้ หลังจากที่ได้ออกเวอร์ชันทดสอบให้ลองใช้มาตั้งแต่เดือนมิถุนายนที่ผ่านมา

Microsoft Security Essentials เป็นซอฟต์แวร์แอนตี้ไวรัสของไมโครซอฟท์ที่เปิดให้ผู้ใช้สามารถดาวน์โหลดไป ใช้งานได้ฟรี โดยซอฟต์แวร์จะอัพเดตตัวเองแบบรายวัน (daily update) เพื่อให้คอมพิวเตอร์ของผู้ใช้ปลอดภัยจากมัลแวร์ใหม่ๆ ที่สามารถขโมยพาสเวิร์ด หรือเปลี่ยนพีซีของผู้ใช้ให้กลายเป็นเซิร์ฟเวอร์ส่งสแปมได้ทันท่วงที โดยไมโครซอฟท์ย้ำว่า มัน (MS Security Essentials) จะไม่ทำให้คอมพิวเตอร์ของคุณทำงานช้าลง

นอกจากนี้ไมโครซอฟท์ยังกล่าวอีกด้วยว่า การเปิดให้ดาวน์โหลดซอฟต์แวร์แอนตี้ไวรัสของทางบริษัทนั้น ไม่ได้มีเจตนาที่จะขโมยธุรกิจจากบริษัทต่างๆ อย่าง แมคอาฟี่ (McAfee) และไซแมนเทค (Symantec) ซึ่งเป็นบริษัทผู้ผลิตโปรแกรมแอนตี้ไวรัสที่ได้รับความนิยมสูงสุดในปัจจุบัน และมาพร้อมกับคุณสมบัติการทำงานทีมากกว่า โดยซอฟต์แวร์แอนตี้ไวรัสที่เปิดใหดาวน์โหลดฟรีนี้จะเหมาะกับเจ้าของเครื่อง คอมพิวเตอร์ที่ยังไม่ได้ติดตั้งแอนตี้ไวรัสไว้ภายในเครื่อง

(หมายเหตุ: ขณะรายงานข่าวทางเว็บไซต์ยังเปิดให้บริการดาวน์โหลดเวอร์ชันเบต้า และเปิดให้เฉพาะบางประเทศเท่านั้น)

ที่มา: http://www.arip.co.th/news.php?id=410048
แหล่งดาวน์โหลด: http://www.microsoft.com/Security_essentials/

Client does not support authentication protocol

ใน MySQL 4.1 ขึ้นไปนั้น ได้ใช้ hashing algorithm ในการเก็บ password เพื่อใช้ในการ Authentication Protocol แบบใหม่ซึ่งทำให้ยังไม่สนับสนุนใน PHP หรือ software client ใน version เก่าๆ (หรือใหม่ๆ บางตัวก็ยังไม่สนับสนุน) ถ้าคุณ upgrade ไปเป็น MySQL 4.1 หรือสูงกว่า การติดต่อเพื่อเข้าไปใช้งานนั้น จะขึ้นข้อความว่า

Client does not support authentication protocol requested by server; consider upgrading MySQL client.

สาเหตุ มาจากการที่ MySQL ได้ทำการปรับเปลี่ยนการเข้ารหัส password ใหม่อย่างที่ได้กล่าวไปแล้วโดย ถ้าใน MySQL version ก่อน 4.1 นั้นใช้การเข้ารหัสที่มีความยาว 16 bytes แต่ใน version ตั้งแต่ 4.1 ขึ้นมาถึงปัจจุบันนี้จะใช้การเข้ารหัสที่มีความยาว 41 bytes ซึ่ง client บางตัวยังไม่สนับสนุน password hashing algorithm แบบนี้ครับ ซึ่งการเข้ารหัส password ที่มีความยาว 41bytes นี้จะทำให้การถอดรหัสเพื่อทำการ hack ข้อมูลนั้นทำได้ยากขึ้นมากเลยทีเดียวครับ

โดยถ้าเราเปรียบเทียบจากตัวก่อนหน้า version 4.1 จะได้

mysql> SELECT PASSWORD(’mypass’);
+——————–+
| PASSWORD(’mypass’) |
+——————–+
| 6f8c114b58f2ce9e |
+——————–+

แต่ถ้าเราใช้คำสั่งเดียวกันใน version หลังจาก 4.1 จะได้

mysql> SELECT PASSWORD(’mypass’);
+———————————————–+
| PASSWORD(’mypass’) |
+———————————————–+
| *43c8aa34cdc98eddd3de1fe9a9c2c2a9f92bb2098d75 |
+———————————————–+

จะเห็นความแตกต่างของการเข้ารหัส password ของ MySQL ครับ

การแก้ไขปัญหานี้ทำได้โดยการ

* ทำการ upgrade ตัว client ที่ติดต่อกับ MySQL ให้เป็น version ที่สนับสนุน hashing algorithm ที่เก็บ password ใหม่ใน MySQL 4.1 ขึ้นไป (client ที่ว่านี้หมายถึง PHP MySQL Module, MySQL Front, PHPMyAdmin และตัวจัดการข้อมูลต่างๆ ที่เชื่อมต่อกับ MySQL ถือเป็น client ทั้งหมดครับ)
* เมื่อทำการติดต่อกับ server โดยใช้ pre-4.1 client program ให้ใช้บัญชี username ที่ใช้ pre-4.1-style password แทนการใช้ username ที่ใช้ style password แบบเก่า
* ทำการ Reset password ไปเป็น pre-4.1 style โดยใช้คำสั่ง SET PASSWORD และ OLD_PASSWORD() function โดยทำใน MySQL Command Line Client ซึ่งใช้คำสั่งดังนี้

mysql> SET PASSWORD FOR

-> ‘some_user‘@’some_host‘ = OLD_PASSWORD(’newpwd‘);

* some_host ให้เปลี่ยนเป็น hostname ที่ใช้เช่น localhost, 127.0.0.1, 192.168.0.1 หรือที่เป็น hostname นั้นๆ
* some_user ให้เปลี่ยนเป็น username ที่ใช้เช่น root, admin หรือ username อื่นๆ ที่ต้องการ
* newpwd ให้เป็นเป็น password ที่ใช้เช่น 1234, abcde หรือที่ต้องการ

ตัวอย่าง :

mysql> SET PASSWORD FOR

-> ‘root‘@’localhost‘ = OLD_PASSWORD(’1234‘);

คือกำหนด password ใหม่ให้กับ root ที่ localhost โดยใช้ hashing algorithm password แบบเก่าโดยกำหนด password คือ 1234

แล้วทำการ UPDATE และ FLUSH PRIVILEGES โดยใช้สั่ง

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD(’newpwd‘)

-> WHERE Host = ‘some_host‘ AND User = ‘some_user‘;

mysql> FLUSH PRIVILEGES;

ตัวอย่าง :

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD(’1234‘)

-> WHERE Host = ‘localhost‘ AND User = ‘root‘;

mysql> FLUSH PRIVILEGES;

* ด้วยวิธีด้านบนนี้เหมาะสำหรับใช้ในกรณีที่มี user ที่อยู่ในฐานข้อมูลน้อยๆ เท่านั้น มิเช่นนั้นแล้วอาจจะต้องเปลี่ยนกันมือหงิก -_-"

* ถ้ามี user ในฐานข้อมูลมากๆ และการปรับเปลี่ยนวิธีด้านบนทั้งหมดเป็นการยากในการทำระบบฐานข้อมูลกลับมา ใช้งานได้ปกติในเวลาอันสั้น เราสามารถบอกให้ MySQL ใช้ password hashing algorithm แบบเก่าตอน start-up service ได้เลย แต่แนะนำให้ใช้งานชั่วคราวเท่านั้นครับ และเมื่อมีเวลาให้ทำการปรับเปลี่ยนไปใช้ระบบ password hashing algorithm แบบใหม่แทน

โดยเริ่มการทำงานของ mysqld ด้วย –old-passwords ที่เป็น option command

ตัวอย่าง :

c:\MySQL\bin\mysqld –old-passwords


ที่มา: http://www.thaicyberpoint.com/ford/blog/id/101/

Thursday, October 1, 2009

ลืม password mysql จะสามารถกู้ข้อมูลได้อย่างไร

ขั้นตอนแรก
แก้ไขไฟล์คอนฟิก my.cnf หรือ my.ini โดยเพิ่มบรรทัดต่อไปนี้เข้าไปในส่วนของ [mysqld]
skip-grant-tables
แล้ว restart service mysql

ขั้นตอนที่สองให้พิมพ์คอมมานด์ต่อไปนี้
mysql -u root mysql


ขั้นตอนที่สามให้รัน statement ต่อไปนี้
update user set password=password('newpassword') where user='root';
flush privileges

ขั้นตอนที่สี่
แก้ไขไฟล์คอนฟิก my.cnf หรือ my.ini โดยเอาบรรทัดต่อไปนี้ออกจากส่วนของ [mysqld]
skip-grant-tables
แล้ว resert service mysql

เสร็จแล้วครับ
ลองทดสอบโดยคำสั่ง
mysql -u root -pnewpassword