1 คะแนน โดย GN⁺ 2024-07-03 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

บูต Linux จาก Google Drive

แต่ทำได้อย่างไร?

  • ต้องการแก้ปัญหานี้ได้ด้วยตัวเองโดยไม่พึ่งอุปกรณ์เสริม
  • ตั้งค่าให้ทำงานเป็นไดรเวอร์ไฟล์ซิสเต็มใน user space โดยใช้ FUSE
  • จำเป็นต้องติดตั้งโปรแกรม FUSE ลงใน Linux kernel initramfs และตั้งค่าเครือข่าย

กระบวนการบูตของ Linux

  1. เฟิร์มแวร์ (BIOS/UEFI) เริ่มต้นและโหลด boot loader
  2. boot loader โหลดเคอร์เนล
  3. เคอร์เนลแตกไฟล์ระบบชั่วคราวลงใน RAM เพื่อเตรียมเครื่องมือสำหรับเมานต์ไฟล์ซิสเต็มจริง
  4. เคอร์เนลเมานต์ไฟล์ซิสเต็มจริง และสลับโปรเซสไปยังระบบ init ที่ทำงานอยู่บนไฟล์ซิสเต็มใหม่

การพิสูจน์แนวคิด

  • ต้องใช้ initramfs ที่มีการรองรับเครือข่ายและมี FUSE binary ที่เหมาะสมรวมอยู่ด้วย
  • สามารถใช้ Dracut เพื่อสร้าง initramfs แบบปรับแต่งเองได้อย่างง่ายดาย
  • ตัดสินใจสร้างโดยอิงจาก Arch Linux

Google เข้ามาเกี่ยวข้อง

  • ใช้โปรเจ็กต์ google-drive-ocamlfuse เพื่อเมานต์ Google Drive ด้วย FUSE
  • พบปัญหาหลายอย่าง เช่น symbolic link, hard link, ความเร็ว, ปัญหาสิทธิ์ เป็นต้น
  • แก้ปัญหาด้วยการสร้าง symbolic link ด้วยตนเองและปรับแต่งการตั้งค่าอื่น ๆ

การรันบนฮาร์ดแวร์จริง

  • ใช้ไดรเวอร์อีเทอร์เน็ตที่ถูกต้องและเปลี่ยนการตั้งค่าเครือข่าย
  • สร้างไฟล์ EFI แบบรวมลงใน USB drive เพื่อทดสอบบนฮาร์ดแวร์จริง

สรุป

  • โปรเจ็กต์นี้แสดงให้เห็นถึงความเป็นไปได้ของ cloud-native computing
  • ยังมีการประยุกต์ใช้อีกหลากหลาย เช่น การบูต Linux ผ่าน SSH หรือจาก Git repository

ความเห็นของ GN⁺

  • โปรเจ็กต์นี้เป็นความพยายามที่น่าสนใจในการสำรวจความเป็นไปได้ของ cloud-native computing
  • สามารถเรียนรู้วิธีแก้ปัญหาหลากหลายที่เกิดขึ้นระหว่างการบูต Linux จาก Google Drive โดยใช้ FUSE
  • ควรคำนึงถึงปัญหาด้านประสิทธิภาพและความเสถียรของไฟล์ซิสเต็มบนคลาวด์
  • โปรเจ็กต์อื่นที่มีความสามารถคล้ายกัน ได้แก่ gitfs
  • เมื่อจะนำเทคโนโลยีใหม่มาใช้ ควรพิจารณาอย่างรอบคอบในด้านประสิทธิภาพ ความเสถียร และความปลอดภัย

1 ความคิดเห็น

 
GN⁺ 2024-07-03
ความคิดเห็นจาก Hacker News
  • จะเรียกเทคนิคนี้ว่า "การบูต" ก็คงไม่ค่อยถูกนัก เพราะเคอร์เนลบูตขึ้นมาแล้ว

    • ถ้ามีการเพิ่มการรองรับการ "mount" google-drive เข้าไปใน grub เมื่อไร ค่อยยอมรับ
    • นี่คือการเอา rootfs ไปวางไว้ในที่แปลก ๆ
    • อ้างอิงไว้ว่า โปรเจกต์ของฉันคือการวาง rootfs ของ NixOS ไว้บน IPFS
  • ในอดีต Sun Solaris เคยบูตผ่าน HTTP ได้

    • เรียกสิ่งนี้ว่า wanboot
    • เป็นตัวเลือกเฟิร์มแวร์ OpenBoot PROM ของเครื่อง SPARC
    • ตัวอย่างการตั้งค่า network boot:
      ok setenv network-boot-arguments dhcp,hostname=myclient,file=https://192.168.1.1/cgi-bin/wanboot-cgi
      ok boot net
      
    • มันโหลด initramfs และเคอร์เนลผ่านเครือข่าย (หรืออินเทอร์เน็ต)
    • ลิงก์เอกสารที่เกี่ยวข้อง:
  • แล้วถ้าบูต Linux ผ่าน bittorrent ล่ะ?

    • ตัวอย่าง nbdkit-torrent-plugin
    • ปัญหาคือเมื่อบูต Linux จากอุปกรณ์ที่มี latency สูง เคอร์เนลจะ timeout คำขอ I/O เร็วเกินไป (ประมาณ 60 วินาที)
    • ต้องเพิ่มเวลาของ timeout
  • ถ้าบูต rootfs ขนาดไม่กี่เมกะไบต์จาก initramfs ในเครื่อง จะยังเรียกว่าเป็นการบูตจากระยะไกลได้ไหม?

  • สิ่งที่ผู้คนต้องการจริง ๆ คือการบูตระดับวินาที โดยเฉพาะในระบบ embedded

    • นี่เป็นปัญหาที่ยาก แต่ดูเหมือนจะไม่มีใครสนใจงานวิจัย CS เพื่อแก้มัน
  • มีการพูดถึงการบูตจาก S3

    • ถ้าเปลี่ยนเป็น Google Drive ก็จะเพิ่ม latency เข้าไป
    • ถึงอย่างนั้นก็ยังทำได้ดีอยู่
  • ตอนที่ติดตั้งเคเบิลโมเด็มที่บ้านครั้งแรก ฉันสามารถใช้บูตฟลอปปีดิสก์เพื่อติดตั้ง BSD ผ่านเครือข่ายได้

    • ตอนนั้นมันน่าทึ่งมาก
    • ไม่แน่ใจว่าวันนี้ยังทำได้อยู่ไหม
    • น่าจะโฮสต์ไฟล์ไว้บน FTP หรือ TFTP
    • ทุกวันนี้ส่วนใหญ่เป็นไฟล์ ISO กันแล้ว
  • เคยทำอะไรคล้าย ๆ กันมาก่อน: บูตจากคลัง RPM บนแผ่นติดตั้ง DVD ของ Tumbleweed

    • เป้าหมายแรกคือเขียนระบบไฟล์ fuse ที่ mount แพ็กเกจ RPM
    • แค่อยากดูว่าจะไปได้ไกลแค่ไหน
    • สุดท้ายก็ไปได้ค่อนข้างไกล:
    • ระบบบูตขึ้นมาเป็นเดสก์ท็อปที่ใช้งานได้ และดูเหมือนว่าแพ็กเกจทั้งหมดบน DVD ถูกติดตั้งไว้แล้ว
  • บน Windows มักทำแบบนี้บ่อย ๆ ด้วย Citrix

    • เรียกสิ่งนี้ว่า pvs
    • ทำ pxe boot ขนาดเล็ก แล้วสตรีมอิมเมจ Windows Server
  • "สติฉันพร่าเลือนลง และท่ามกลางเวลาของโปรแกรมเมอร์นับพันปีพร้อมเสียงกรีดร้องแห่งความบ้าคลั่ง ฉันก็ค้นพบผลงานชิ้นเอกของตัวเอง"

    • คู่ควรกับการเข้าชิงรางวัลพูลิตเซอร์