SSD PCIe M.2 คืออะไรและทำงานอย่างไร
SSD PCIe M.2 เป็น Solid State Drive ที่ใช้ form factor M.2 (ขนาดเล็กเท่าแผ่นหมากฝรั่ง) และเชื่อมต่อผ่าน PCIe bus โดยตรง ทำให้มีความเร็วสูงกว่า SSD แบบ SATA หลายเท่า M.2 เป็นชื่อของ connector/form factor ส่วน NVMe (Non-Volatile Memory Express) เป็น protocol ที่ออกแบบมาเฉพาะสำหรับ SSD
M.2 SSD มี 2 ประเภทหลักคือ M.2 SATA ที่ใช้ SATA protocol ผ่าน M.2 connector ความเร็วสูงสุด 550 MB/s เท่ากับ SATA SSD ปกติ และ M.2 NVMe ที่ใช้ NVMe protocol ผ่าน PCIe bus ความเร็วสูงกว่า SATA หลายเท่า PCIe Gen 3 x4 ได้สูงสุด 3,500 MB/s, Gen 4 x4 ได้สูงสุด 7,000 MB/s และ Gen 5 x4 ได้สูงสุด 14,000 MB/s
ขนาดของ M.2 SSD ระบุด้วยตัวเลข 4 หรือ 5 หลักเช่น 2280 หมายความว่ากว้าง 22mm ยาว 80mm ซึ่งเป็นขนาดที่พบบ่อยที่สุด ขนาดอื่นๆเช่น 2230 (ใช้ใน Steam Deck), 2242 และ 22110
Key notch บน M.2 connector บอกประเภทของ SSD ได้แก่ B key สำหรับ SATA และ PCIe x2, M key สำหรับ NVMe PCIe x4 และ B+M key ที่รองรับทั้ง SATA และ NVMe ต้องตรวจสอบว่า motherboard รองรับ key type ไหนัก่อนซื้อ
เปรียบเทียบ NVMe กับ SATA และ PCIe Gen 3 4 5
ตารางเปรียบเทียบ SSD แต่ละประเภท
# เปรียบเทียบ SSD แต่ละประเภท
#
# ประเภท | Interface | Max Speed | Latency | ราคา/TB
# ============== | ========== | =========== | ======== | ========
# HDD 7200rpm | SATA III | ~200 MB/s | ~10ms | ~$20
# SATA SSD | SATA III | ~550 MB/s | ~0.1ms | ~$50
# NVMe Gen 3 x4 | PCIe 3.0 | ~3,500 MB/s | ~0.02ms | ~$60
# NVMe Gen 4 x4 | PCIe 4.0 | ~7,000 MB/s | ~0.01ms | ~$70
# NVMe Gen 5 x4 | PCIe 5.0 | ~14,000 MB/s| ~0.005ms | ~$150
#
# NAND Flash Types:
# SLC (1 bit/cell) — เร็วสุด ทนทานสุด แพงสุด (enterprise)
# MLC (2 bits/cell) — สมดุลดี (enterprise/prosumer)
# TLC (3 bits/cell) — คุ้มค่า (consumer/mainstream)
# QLC (4 bits/cell) — ถูกสุด ช้าสุด ทนทานน้อยสุด (storage)
#
# DRAM Cache:
# มี DRAM — เร็วสม่ำเสมอ เหมาะสำหรับ OS drive และ workload หนัก
# ไม่มี DRAM (DRAMless) — อาจช้าลงเมื่อเขียนมาก เหมาะสำหรับ secondary storage
# HMB (Host Memory Buffer) — ใช้ RAM ของระบบแทน DRAM บน SSD
#
# TBW (Terabytes Written) — อายุการใช้งาน:
# 256GB TLC SSD: ~150 TBW
# 512GB TLC SSD: ~300 TBW
# 1TB TLC SSD: ~600 TBW
# 2TB TLC SSD: ~1200 TBW
#
# สำหรับการใช้งานทั่วไปเขียน ~30GB/วัน
# 600 TBW / 30 GB = 20,000 วัน = ~54 ปี (เกิน warranty 5 ปี)
# SSD แนะนำ 2024:
# Budget: Kingston NV2 (Gen 4, DRAMless)
# Mid-range: Samsung 980 PRO, WD Black SN770 (Gen 4)
# High-end: Samsung 990 PRO, WD Black SN850X (Gen 4)
# Extreme: Crucial T700, Samsung 990 EVO Plus (Gen 5)
ตรวจสอบ SSD Health และ Performance บน Linux
ใช้ command line tools สำหรับตรวจสอบสถานะ SSD
# ตรวจสอบ SSD ที่ติดตั้งในระบบ
lsblk -d -o NAME, SIZE, MODEL, ROTA, TRAN, TYPE
# NAME SIZE MODEL ROTA TRAN TYPE
# nvme0n1 1T Samsung SSD 990 PRO 0 nvme disk
# sda 500G Samsung SSD 870 EVO 0 sata disk
# ดูข้อมูล NVMe SSD
sudo nvme list
# Node SN Model Namespace Usage Format FW Rev
# /dev/nvme0n1 S6XXXXXXX Samsung SSD 990 PRO 1 500.11 GB/1.00 TB 512 B + 0 B 4B2QJXD7
# ดูรายละเอียด NVMe
sudo nvme id-ctrl /dev/nvme0n1 | head -20
# SMART Health Information สำหรับ NVMe
sudo nvme smart-log /dev/nvme0n1
# Smart Log for NVME device:nvme0n1
# critical_warning : 0
# temperature : 35 C
# available_spare : 100%
# available_spare_threshold : 10%
# percentage_used : 1%
# data_units_read : 12,345,678
# data_units_written : 8,765,432
# host_read_commands : 234,567,890
# host_write_commands : 123,456,789
# power_cycles : 150
# power_on_hours : 2,500
# unsafe_shutdowns : 5
# SMART สำหรับ SATA SSD
sudo smartctl -a /dev/sda
# === START OF SMART DATA SECTION ===
# SMART overall-health self-assessment test result: PASSED
# ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE
# 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail
# 177 Wear_Leveling_Count 0x0013 099 099 000 Pre-fail
# 179 Used_Rsvd_Blk_Cnt_Tot 0x0013 100 100 010 Pre-fail
# 241 Total_LBAs_Written 0x0032 099 099 000 Old_age
# ตรวจสอบ temperature
sudo nvme smart-log /dev/nvme0n1 | grep temperature
# sensors ถ้าติดตั้ง lm-sensors
sensors | grep -i nvme
# ดูข้อมูล PCIe link speed
sudo lspci -vvv | grep -A 20 "NVMe"
# LnkCap: Speed 16GT/s (PCIe Gen 4), Width x4
# LnkSta: Speed 16GT/s, Width x4
# ตรวจสอบ firmware version
sudo nvme fw-log /dev/nvme0n1
# ติดตั้ง tools ที่จำเป็น
sudo apt install nvme-cli smartmontools fio hdparm -y
Benchmark SSD ด้วย fio และ dd
ทดสอบความเร็ว SSD ด้วยเครื่องมือ benchmark มาตรฐาน
# Benchmark ด้วย fio (Flexible I/O Tester)
# Sequential Read
sudo fio --name=seq_read --ioengine=libaio --direct=1 \
--rw=read --bs=1M --numjobs=4 --size=1G \
--runtime=30 --group_reporting --filename=/dev/nvme0n1
# Sequential Write
sudo fio --name=seq_write --ioengine=libaio --direct=1 \
--rw=write --bs=1M --numjobs=4 --size=1G \
--runtime=30 --group_reporting --filename=/tmp/fio_test
# Random Read (4K)
sudo fio --name=rand_read --ioengine=libaio --direct=1 \
--rw=randread --bs=4k --numjobs=16 --iodepth=64 --size=1G \
--runtime=30 --group_reporting --filename=/tmp/fio_test
# Random Write (4K)
sudo fio --name=rand_write --ioengine=libaio --direct=1 \
--rw=randwrite --bs=4k --numjobs=16 --iodepth=64 --size=1G \
--runtime=30 --group_reporting --filename=/tmp/fio_test
# Mixed Read/Write (70/30)
sudo fio --name=mixed --ioengine=libaio --direct=1 \
--rw=randrw --rwmixread=70 --bs=4k --numjobs=8 --iodepth=32 \
--size=1G --runtime=30 --group_reporting --filename=/tmp/fio_test
# Benchmark ด้วย dd (Quick test)
# Sequential Write
dd if=/dev/zero of=/tmp/dd_test bs=1M count=1024 conv=fdatasync 2>&1 | tail -1
# 1073741824 bytes (1.1 GB) copied, 0.285 s, 3.8 GB/s
# Sequential Read
dd if=/tmp/dd_test of=/dev/null bs=1M count=1024 2>&1 | tail -1
# Clear cache before read test
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
# hdparm read benchmark
sudo hdparm -Tt /dev/nvme0n1
# Timing cached reads: 28000 MB in 2.00 seconds = 14000 MB/sec
# Timing buffered disk reads: 6400 MB in 3.00 seconds = 2133 MB/sec
# Cleanup
rm -f /tmp/fio_test /tmp/dd_test
# ผลลัพธ์ที่คาดหวัง (NVMe Gen 4):
# Sequential Read: ~6,500-7,000 MB/s
# Sequential Write: ~5,000-6,500 MB/s
# Random Read 4K: ~900,000-1,000,000 IOPS
# Random Write 4K: ~800,000-1,200,000 IOPS
ตั้งค่า RAID และ LVM สำหรับ NVMe SSD
สร้าง software RAID และ LVM สำหรับ NVMe SSD
# สร้าง RAID 0 จาก NVMe SSD 2 ตัว (ความเร็วสูงสุด)
sudo mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/nvme0n1 /dev/nvme1n1
sudo mkfs.ext4 /dev/md0
sudo mkdir /mnt/raid0
sudo mount /dev/md0 /mnt/raid0
# สร้าง RAID 1 (Mirror — ข้อมูลปลอดภัย)
sudo mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/nvme0n1p1 /dev/nvme1n1p1
sudo mkfs.ext4 /dev/md1
sudo mkdir /mnt/raid1
sudo mount /dev/md1 /mnt/raid1
# ตรวจสอบ RAID
cat /proc/mdstat
sudo mdadm --detail /dev/md0
# บันทึก RAID config
sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf
sudo update-initramfs -u
# === LVM (Logical Volume Manager) ===
# สร้าง Physical Volume
sudo pvcreate /dev/nvme0n1p2
# สร้าง Volume Group
sudo vgcreate nvme-vg /dev/nvme0n1p2
# สร้าง Logical Volumes
sudo lvcreate -L 100G -n lv-root nvme-vg # สำหรับ /
sudo lvcreate -L 50G -n lv-var nvme-vg # สำหรับ /var
sudo lvcreate -l 100%FREE -n lv-data nvme-vg # ที่เหลือสำหรับ /data
# Format
sudo mkfs.ext4 /dev/nvme-vg/lv-root
sudo mkfs.ext4 /dev/nvme-vg/lv-var
sudo mkfs.xfs /dev/nvme-vg/lv-data
# ขยาย Logical Volume (ไม่ต้อง unmount)
sudo lvextend -L +50G /dev/nvme-vg/lv-data
sudo resize2fs /dev/nvme-vg/lv-data # ext4
# sudo xfs_growfs /dev/nvme-vg/lv-data # xfs
# ดูสถานะ
sudo pvs # Physical Volumes
sudo vgs # Volume Groups
sudo lvs # Logical Volumes
# /etc/fstab สำหรับ mount ถาวร
echo '/dev/nvme-vg/lv-root / ext4 defaults, noatime 0 1' | sudo tee -a /etc/fstab
echo '/dev/nvme-vg/lv-var /var ext4 defaults, noatime 0 2' | sudo tee -a /etc/fstab
echo '/dev/nvme-vg/lv-data /data xfs defaults, noatime 0 2' | sudo tee -a /etc/fstab
Monitoring SSD ด้วย SMART และ Script อัตโนมัติ
สร้าง monitoring script สำหรับตรวจสอบสุขภาพ SSD อัตโนมัติ
#!/bin/bash
# ssd_monitor.sh — SSD Health Monitoring Script
set -euo pipefail
LOG_FILE="/var/log/ssd_health.log"
ALERT_TEMP=70 # องศาเตือน
ALERT_SPARE=20 # available spare % เตือน
ALERT_WEAR=80 # percentage used % เตือน
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"; }
check_nvme() {
local dev=$1
local smart=$(sudo nvme smart-log "$dev" 2>/dev/null)
if [ -z "$smart" ]; then
log "ERROR: Cannot read SMART from $dev"
return 1
fi
local temp=$(echo "$smart" | grep "^temperature" | awk '{print $3}')
local spare=$(echo "$smart" | grep "available_spare " | awk '{print $3}' | tr -d '%')
local used=$(echo "$smart" | grep "percentage_used" | awk '{print $3}' | tr -d '%')
local written=$(echo "$smart" | grep "data_units_written" | awk '{print $3}' | tr -d ',')
local hours=$(echo "$smart" | grep "power_on_hours" | awk '{print $3}' | tr -d ',')
local warning=$(echo "$smart" | grep "critical_warning" | awk '{print $3}')
# คำนวณ TBW
local tbw_gb=$(echo "scale=2; $written * 512 / 1000000000" | bc 2>/dev/null || echo "N/A")
log "$dev: temp=C spare=% used=% written=GB hours=h warning=$warning"
# ตรวจสอบ alerts
if [ "$warning" != "0" ]; then
log "CRITICAL: $dev critical_warning=$warning"
fi
if [ "$temp" -gt "$ALERT_TEMP" ] 2>/dev/null; then
log "WARNING: $dev temperature C exceeds C"
fi
if [ "$spare" -lt "$ALERT_SPARE" ] 2>/dev/null; then
log "WARNING: $dev available_spare % below %"
fi
if [ "$used" -gt "$ALERT_WEAR" ] 2>/dev/null; then
log "WARNING: $dev percentage_used % exceeds %"
fi
}
check_sata() {
local dev=$1
local health=$(sudo smartctl -H "$dev" | grep "result" | awk '{print $NF}')
local temp=$(sudo smartctl -A "$dev" | grep "Temperature" | awk '{print $10}')
local wear=$(sudo smartctl -A "$dev" | grep "Wear_Leveling" | awk '{print $4}')
log "$dev: health=$health temp=C wear_level=$wear"
if [ "$health" != "PASSED" ]; then
log "CRITICAL: $dev SMART health=$health"
fi
}
# Main
log "=== SSD Health Check ==="
# ตรวจสอบ NVMe SSDs
for dev in /dev/nvme?n1; do
[ -e "$dev" ] && check_nvme "$dev"
done
# ตรวจสอบ SATA SSDs
for dev in /dev/sd?; do
if [ "$(cat /sys/block/$(basename $dev)/queue/rotational)" = "0" ]; then
check_sata "$dev"
fi
done
log "=== Check Complete ==="
# ตั้ง cron ให้รันทุกชั่วโมง
# echo "0 * * * * /usr/local/bin/ssd_monitor.sh" | sudo crontab -
FAQ คำถามที่พบบ่อย
Q: M.2 SATA กับ M.2 NVMe ใช้แทนกันได้ไหม?
A: ขึ้นอยู่กับ motherboard บาง M.2 slot รองรับทั้ง SATA และ NVMe (ดูจาก key notch B+M) แต่บาง slot รองรับแค่ NVMe (M key เท่านั้น) ต้องดู manual ของ motherboard ก่อนซื้อ ถ้า slot รองรับแค่ NVMe แล้วใส่ M.2 SATA จะตรวจไม่เจอ SSD
Q: NVMe Gen 5 จำเป็นไหมสำหรับการใช้งานทั่วไป?
A: ไม่จำเป็นสำหรับการใช้งานทั่วไปเช่นเปิดโปรแกรม เล่นเกม หรือทำงานออฟฟิศ ความแตกต่างระหว่าง Gen 3 กับ Gen 5 แทบสังเกตไม่ได้ในการใช้งานปกติ Gen 5 เหมาะสำหรับ video editing ไฟล์ขนาดใหญ่ database server หรือ workload ที่ต้อง sequential read/write สูงมาก
Q: SSD ต้อง TRIM ไหม?
A: ต้อง TRIM ช่วยให้ SSD รู้ว่า block ไหนไม่ได้ใช้แล้วสามารถ erase ได้ ทำให้ write performance ไม่ลดลงเมื่อใช้นานๆ Linux เปิด TRIM อัตโนมัติผ่าน fstrim.timer หรือใส่ discard option ใน fstab Windows เปิด TRIM อัตโนมัติอยู่แล้ว ตรวจสอบด้วย sudo fstrim -v / หรือ systemctl status fstrim.timer
Q: SSD ร้อนเกินไปทำอย่างไร?
A: NVMe SSD อาจร้อนถึง 70-80 องศาเมื่อ write หนักซึ่งจะ thermal throttle ลดความเร็วลง แก้ไขด้วยการติด heatsink บน SSD (มาพร้อม motherboard หลายรุ่น) ตรวจสอบ airflow ในเคส หลีกเลี่ยงการวาง SSD ใกล้ GPU ที่ร้อน และใช้ thermal pad คุณภาพดีระหว่าง SSD กับ heatsink
Q: เลือก TLC หรือ QLC ดี?
A: TLC เหมาะสำหรับ OS drive และ workload ที่เขียนบ่อยเพราะทนทานกว่าและ write performance สม่ำเสมอกว่า QLC เหมาะสำหรับ storage drive ที่เน้นอ่านมากกว่าเขียนเช่นเก็บเกม เก็บไฟล์ เก็บ backup เพราะราคาถูกกว่า capacity เยอะกว่า สำหรับ drive หลักแนะนำ TLC
