SSD PCIe M.2 คือ — เปรียบเทียบ NVMe SATA พร้อม
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
