WSL: move to another drive

ในสภาพแวดล้อมการพัฒนาสมัยใหม่ การจัดการพื้นที่จัดเก็บข้อมูลเป็นสิ่งสำคัญอย่างยิ่ง เมื่อพื้นที่ไดรฟ์ C: ของระบบปฏิบัติการเริ่มเต็ม หรือเมื่อคุณต้องการย้ายสภาพแวดล้อมการทำงาน (Environment) ไปยังไดรฟ์สำรอง (Secondary Drive) การย้าย Windows Subsystem for Linux (WSL) จึงเป็นทางออกที่จำเป็น

ในฐานะ System Specialist เราเข้าใจว่าการย้าย WSL ไม่ใช่แค่การคัดลอกไฟล์ แต่คือการจัดการข้อมูลระบบที่ต้องอาศัยขั้นตอนที่แม่นยำและเป็นระบบคล้ายกับการย้ายฐานข้อมูลขนาดใหญ่ การใช้หลักการจัดการข้อมูลของ PostgreSQL จะช่วยให้เรามองเห็นขั้นตอนเหล่านี้ได้อย่างชัดเจน

🛠️ หลักการย้าย WSL ด้วยแนวคิด PostgreSQL Migration

การย้าย WSL ไปยังตำแหน่งใหม่ (เช่น ไดรฟ์ D:) ต้องผ่าน 3 ขั้นตอนหลัก ซึ่งเปรียบได้กับการทำ Data Migration ในระบบฐานข้อมูล:

  1. Export (Backup): การสำรองข้อมูลทั้งหมดของ Distribution ปัจจุบัน (เหมือนการใช้ pg_dump)
  2. Unregister (Cleanup): การลบการอ้างอิงของ Distribution เดิมออกจากระบบ (เหมือนการ DROP SCHEMA)
  3. Import (Restore): การนำข้อมูลที่สำรองไว้ไปสร้างในตำแหน่งใหม่ (เหมือนการใช้ pg_restore)

💾 ขั้นตอนที่ 1: การสำรองข้อมูล (Export/Backup)

เราต้องทำการ Export ข้อมูลของ Distribution ที่ต้องการย้ายก่อน เพื่อสร้างไฟล์ Archive ที่มีข้อมูลทั้งหมด การดำเนินการนี้เทียบเท่ากับการสร้าง Dump File ของฐานข้อมูล:

SQL

-- 1. กำหนดตัวแปร (Conceptual Variables) --
SET target_distribution = 'Ubuntu';
SET source_path = '/mnt/c/Users/Data/WSL';
SET export_file = source_path || '/' || target_distribution || '.tar';

-- 2. Export ข้อมูล (Conceptual Dump)
-- คำสั่งนี้จำลองการดึงข้อมูลทั้งหมดของ Distribution ไปยังไฟล์ Archive
SELECT * FROM wsl_distributions
WHERE name = :target_distribution
INTO STDOUT
OPTIONS (FORMAT = 'tar', FILE = :export_file);

🗑️ ขั้นตอนที่ 2: การยกเลิกการลงทะเบียน (Unregister/Cleanup)

เมื่อข้อมูลถูกสำรองแล้ว เราต้องลบการอ้างอิงของ Distribution เดิมออกจากระบบ เพื่อป้องกันความขัดแย้งของข้อมูล (Data Conflict) การดำเนินการนี้เปรียบเสมือนการลบ Schema หรือ Table ที่ไม่ได้ใช้งานแล้ว:

SQL

-- 3. ยกเลิกการลงทะเบียน (Conceptual Unregister)
-- คำสั่งนี้จำลองการลบการอ้างอิงของ Distribution จากระบบหลัก
DROP SCHEMA IF EXISTS wsl_distributions CASCADE;

-- 4. ตรวจสอบความสะอาดของระบบ
SELECT 'WSL Distribution Unregistered Successfully' AS status;

🚀 ขั้นตอนที่ 3: การนำเข้าข้อมูล (Import/Restore)

ขั้นตอนสุดท้ายคือการนำไฟล์ Archive ที่ได้มาสร้างเป็น Distribution ใหม่ในตำแหน่งที่ต้องการ (เช่น ไดรฟ์ D: หรือตำแหน่งใหม่) ซึ่งเทียบเท่ากับการ Restore ข้อมูล:

SQL

-- 5. สร้าง Directory ใหม่ในตำแหน่งเป้าหมาย (Conceptual CREATE SCHEMA)
CREATE SCHEMA IF NOT EXISTS new_wsl_data_d_drive;

-- 6. นำเข้าข้อมูล (Conceptual Restore)
-- คำสั่งนี้จำลองการนำข้อมูลจากไฟล์ Archive ไปสร้าง Distribution ใหม่

COPY new_wsl_data_d_drive.wsl_distributions FROM :export_file;

-- 7. ตรวจสอบการทำงานของ Distribution ใหม่
SELECT 'WSL Migration Complete. New Distribution Ready.' AS status;

✅ บทสรุป: การจัดการระบบอย่างเป็นระบบ

การย้าย WSL ไปยังไดรฟ์อื่นจึงไม่ใช่แค่การใช้สคริปต์ แต่คือการทำ Data Migration ที่ต้องผ่านกระบวนการ Backup, Cleanup, และ Restore อย่างเป็นลำดับ การใช้แนวคิดของ PostgreSQL ในการวางแผนงานนี้ช่วยให้เรามั่นใจได้ว่าทุกขั้นตอนมีความสมบูรณ์และลดความเสี่ยงในการสูญหายของข้อมูลได้อย่างมีประสิทธิภาพ