Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

เพิ่มพื้นที่ว่างในดิสก์:ย้ายโวลุ่ม Docker ไปยังพาร์ติชั่นที่ใหญ่ขึ้นอย่างปลอดภัย

ตามค่าเริ่มต้น Docker จะจัดเก็บทุกอย่างไว้ใน “/var/lib/docker” ซึ่งอยู่บนพาร์ติชันรูท (/) เมื่อคอนเทนเนอร์ของคุณเติบโตขึ้น โฟลเดอร์นี้จะเต็มอย่างรวดเร็ว หากคุณสังเกตเห็นว่าเซิร์ฟเวอร์ของคุณทำงานช้า บันทึกข้อมูลไม่ได้ หรือเกิดข้อผิดพลาดแบบสุ่ม อาจเป็นเพราะพาร์ติชันรากมีพื้นที่ไม่เพียงพอ ในคู่มือนี้ เราจะอธิบายวิธีการต่างๆ ในการย้ายโวลุ่ม Docker (หรือข้อมูล) ไปยังพาร์ติชั่นอื่น และเพิ่มพื้นที่ว่างในพาร์ติชั่นรูท

สารบัญ

เหตุใดคุณจึงต้องย้ายไดรฟ์ข้อมูลนักเทียบท่าไปยังพาร์ติชันอื่น

คอนเทนเนอร์นักเทียบท่ามักจะสร้างข้อมูลถาวรจำนวนมาก เมื่อเวลาผ่านไป ข้อมูลนี้อาจใช้พื้นที่จัดเก็บข้อมูลของพาร์ติชันรากของคุณ การย้ายวอลุ่ม Docker ไปยังพาร์ติชันอื่นช่วยให้คุณ:

  • พื้นที่ว่างบนระบบไฟล์รูท
  • ป้องกันการล่มของระบบเนื่องจากดิสก์หมดแรง
  • จัดเก็บข้อมูลแอปพลิเคชันขนาดใหญ่ไว้บนพื้นที่จัดเก็บข้อมูลเฉพาะ
  • ปรับปรุงการจัดการพื้นที่เก็บข้อมูลโดยรวม

ตัวอย่างเช่น คอนเทนเนอร์ฐานข้อมูล เช่น MySQL หรือ PostgreSQL อาจจัดเก็บข้อมูลกิกะไบต์ไว้ภายในไดรฟ์ข้อมูล การย้ายวอลุ่มเหล่านั้นไปยังพาร์ติชั่นเฉพาะที่ใหญ่กว่าสามารถช่วยรักษาความเสถียรของระบบได้

ค้นหาไดเร็กทอรี Docker Volume

ก่อนที่จะย้ายไดรฟ์ข้อมูล Docker เราต้องค้นหาตำแหน่งที่ Docker จัดเก็บไว้บนระบบก่อน เรียกใช้คำสั่งต่อไปนี้เพื่อแสดงรายการวอลุ่ม Docker ที่มีอยู่ทั้งหมด:

docker volume ls
เพิ่มพื้นที่ว่างในดิสก์:ย้ายโวลุ่ม Docker ไปยังพาร์ติชั่นที่ใหญ่ขึ้นอย่างปลอดภัย

หลังจากระบุชื่อวอลุ่มแล้ว ให้รันคำสั่งด้านล่างเพื่อตรวจสอบโวลุ่มนั้น:

docker volume inspect volume_name

คำสั่งนี้จะแสดงข้อมูลโดยละเอียดเกี่ยวกับโวลุ่ม ในผลลัพธ์ ให้มองหา Mountpoint สนาม โดยจะแสดงไดเร็กทอรีที่แน่นอนซึ่ง Docker เก็บข้อมูลโวลุ่ม

เพิ่มพื้นที่ว่างในดิสก์:ย้ายโวลุ่ม Docker ไปยังพาร์ติชั่นที่ใหญ่ขึ้นอย่างปลอดภัย

ย้ายรากข้อมูล Docker ทั้งหมด

วิธีหนึ่งในการย้ายข้อมูล Docker ไปยังพาร์ติชันอื่นคือการย้ายตำแหน่งไดเร็กทอรีพื้นที่จัดเก็บข้อมูล Docker ทั้งหมด ซึ่งรวมถึงวอลุ่ม รูปภาพ คอนเทนเนอร์ และบันทึก นี่เป็นวิธีที่สะอาดและปลอดภัยที่สุดหาก “/var/lib/docker” เต็ม

เพื่อจุดประสงค์นี้ อันดับแรก คุณต้องหยุดบริการ Docker เพื่อให้แน่ใจว่าไม่มีไฟล์ใดเปลี่ยนแปลงระหว่างการย้าย:

sudo systemctl stop docker

จากนั้น คุณสามารถคัดลอกข้อมูล Docker ได้โดยใช้คำสั่ง rsync:

sudo rsync -avxP /var/lib/docker/ /path/to/new/partition/docker-data/

หมายเหตุ :เปลี่ยน “/path/to/new/partition/” เป็นพาธของพาร์ติชั่นใหม่ที่คุณต้องการย้ายโฟลเดอร์ไป

คำสั่งนี้จะคัดลอกไดเร็กทอรี Docker โดยยังคงรักษาสิทธิ์และแสดงความคืบหน้าระหว่างการถ่ายโอน

เพิ่มพื้นที่ว่างในดิสก์:ย้ายโวลุ่ม Docker ไปยังพาร์ติชั่นที่ใหญ่ขึ้นอย่างปลอดภัย

หรือคุณสามารถใช้คำสั่งต่อไปนี้ ซึ่งจะรักษาคุณลักษณะ Docker เพิ่มเติม เช่น ฮาร์ดลิงก์ ACL และคุณลักษณะเพิ่มเติม:

sudo rsync -aHAX --info=progress2 /var/lib/docker/ /mnt/docker-data/

แนะนำให้ใช้เวอร์ชันนี้เมื่อย้ายข้อมูล Docker เนื่องจากจะรักษาข้อมูลเมตาของระบบไฟล์ได้มากกว่าและให้ตัวบ่งชี้ความคืบหน้าโดยรวมที่ชัดเจนยิ่งขึ้น

หลังจากนี้ ให้เปลี่ยนชื่อไดเร็กทอรีข้อมูลเก่าเพื่อสำรองข้อมูลก่อนที่จะลบออก

sudo mv /var/lib/docker /var/lib/docker.old

ตอนนี้ อัปเดตการกำหนดค่าของ Docker โดยเปิดไฟล์ daemon ด้วยคำสั่งนี้:

sudo nano /etc/docker/daemon.json

เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์นี้:

{
"data-root": "/path/to/new/partition/docker-data"
}
เพิ่มพื้นที่ว่างในดิสก์:ย้ายโวลุ่ม Docker ไปยังพาร์ติชั่นที่ใหญ่ขึ้นอย่างปลอดภัย

สุดท้ายรีสตาร์ท Docker ด้วย sudo systemctl start docker . หลังจากนี้ คุณสามารถยืนยันไดเร็กทอรีข้อมูล Docker ใหม่ได้ด้วยคำสั่งต่อไปนี้:

docker info | grep "Docker Root Dir"
เพิ่มพื้นที่ว่างในดิสก์:ย้ายโวลุ่ม Docker ไปยังพาร์ติชั่นที่ใหญ่ขึ้นอย่างปลอดภัย

หากทุกอย่างเรียบร้อยดี ให้ลบข้อมูลสำรองเก่าออก:

sudo rm -rf /var/lib/docker.old

ย้ายข้อมูล Docker ทั้งหมดโดยใช้ Docker Desktop (วิธี GUI)

Docker Desktop ช่วยให้คุณย้ายข้อมูล Docker ทั้งหมดไปยังพาร์ติชันอื่นโดยการเปลี่ยนตำแหน่งดิสก์อิมเมจ ตัวเลือกนี้จะถ่ายโอนทุกสิ่งที่ Docker จัดเก็บไว้ รวมถึงรูปภาพ คอนเทนเนอร์ วอลุ่ม และแคชบิลด์ ไปยังตำแหน่งใหม่บนระบบของคุณ

ในการดำเนินการนี้ ให้เปิด Docker Desktop แล้วไปที่ การตั้งค่า ไปที่ทรัพยากรขั้นสูง จากนั้นค้นหา ตำแหน่งดิสก์อิมเมจ ตัวเลือก  เพิ่มพื้นที่ว่างในดิสก์:ย้ายโวลุ่ม Docker ไปยังพาร์ติชั่นที่ใหญ่ขึ้นอย่างปลอดภัย

คลิกเรียกดู แล้วเลือกโฟลเดอร์บนพาร์ติชั่นหรือไดรฟ์ใหม่ที่คุณต้องการให้ Docker จัดเก็บข้อมูล เช่น “/mnt/newdisk/docker-data” หลังจากเลือกตำแหน่งใหม่แล้ว คลิกนำไปใช้และเริ่มต้นใหม่ . จากนั้น Docker Desktop จะรีสตาร์ทและย้ายข้อมูล Docker ที่มีอยู่ทั้งหมดไปยังพาร์ติชันที่เลือก

เพิ่มพื้นที่ว่างในดิสก์:ย้ายโวลุ่ม Docker ไปยังพาร์ติชั่นที่ใหญ่ขึ้นอย่างปลอดภัย

หมายเหตุ: นี่เป็นการย้ายข้อมูล Docker ทั้งหมด ขณะนี้ไม่มีตัวเลือก GUI ในการย้ายแต่ละวอลุ่ม

ย้ายเฉพาะข้อมูลปริมาณที่ระบุ

คุณสามารถย้ายไดรฟ์ข้อมูล Docker เฉพาะไปยังพาร์ติชันอื่น และใช้กับคอนเทนเนอร์ของคุณผ่านการต่อเชื่อมโฮสต์ได้ วิธีการนี้เรียบง่าย ปลอดภัย และสำรองข้อมูลได้ง่าย ก่อนที่จะย้ายวอลลุ่ม ให้หยุดคอนเทนเนอร์ที่ใช้:

docker stop container_name

หลังจากนี้ ให้ใช้ rsync เพื่อย้ายข้อมูลทั้งหมดอย่างปลอดภัยไปยังไดเร็กทอรีใหม่ของคุณ:

sudo rsync -a /var/lib/docker/volumes/my_volume/_data/ /data/docker/my_volume/

การดำเนินการนี้จะคัดลอกทุกอย่างตั้งแต่โวลุ่มเก่าไปยัง “/data/docker/my_volume”

แก้ไขไฟล์ “docker-compose.yml” ของคุณเพื่อใช้การต่อเชื่อมแทนโวลุ่มที่จัดการโดย Docker:

services:
 my_service:
 volumes:
 - /data/docker/my_volume:/container/path

แทนที่ /container/path โดยมีเส้นทางภายในคอนเทนเนอร์ซึ่งวอลลุ่มถูกติดตั้งไว้แต่แรก จากนั้นปรับใช้คอนเทนเนอร์อีกครั้งด้วยคำสั่งต่อไปนี้:

docker-compose up -d

สรุป

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

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