การย้ายโฟลเดอร์ข้อมูล Nextcloud ไปยังฮาร์ดไดรฟ์ภายนอกที่มีขนาดใหญ่กว่านั้นดูเหมือนจะเป็นงานคัดลอกและแก้ไขง่ายๆ แต่ไม่ใช่ รายละเอียดที่สำคัญคือ Nextcloud ระบุพื้นที่จัดเก็บข้อมูลภายในเครื่องโดยใช้เส้นทางสัมบูรณ์บนดิสก์ หากเส้นทางนั้นเปลี่ยนแปลงโดยไม่ระมัดระวัง เซิร์ฟเวอร์อาจถือว่าไฟล์เหล่านั้นอยู่ในตำแหน่งจัดเก็บข้อมูลที่แตกต่างกัน ซึ่งอาจนำไปสู่การเกิดไฟล์ซ้ำหรือไฟล์ที่ไม่มีเจ้าของ ข้อมูลเมตาเสียหาย หรือความสัมพันธ์ในการแชร์สูญหาย
ดังนั้น วิธีการที่ปลอดภัยที่สุดสำหรับระบบที่ติดตั้งอยู่แล้วคือ การคง เส้นทางไดเร็กทอรีข้อมูลเดิมไว้ให้ Nextcloud มองเห็นในขณะที่ย้ายข้อมูลจริงไปยังดิสก์ภายนอก คู่มือการดูแลระบบปัจจุบันของ Nextcloud แนะนำอย่างชัดเจนให้ย้ายไดเร็กทอรี แล้วสร้างลิงก์สัญลักษณ์จากเส้นทางเดิมไปยังตำแหน่งใหม่ คู่มือยังเตือนด้วยว่า การเปลี่ยนแปลงโดยตรงนั้นdatadirectoryจำเป็นต้องมีการเปลี่ยนแปลงฐานข้อมูล และไม่ใช่วิธีการย้ายข้อมูลที่ได้รับการสนับสนุน โปรดดูคำแนะนำในการแก้ไขปัญหาไดเร็กทอรีข้อมูลของ Nextcloud
ก่อนเริ่มต้น: อะไรบ้างที่ได้รับการตรวจสอบแล้ว และอะไรบ้างที่ขึ้นอยู่กับการตั้งค่าของคุณ?
| คำถาม | คำตอบเชิงปฏิบัติ |
ฉันสามารถแก้ไขdatadirectoryเพิ่มเติม ได้เลย config.phpไหม? | การเปลี่ยนพาธพื้นที่จัดเก็บข้อมูลภายในเครื่องโดยตรงนั้นไม่ปลอดภัย เอกสารของ Nextcloud ระบุว่า การเปลี่ยนพาธพื้นที่จัดเก็บข้อมูลภายในเครื่องโดยตรงอาจทำให้ความสัมพันธ์ของฐานข้อมูลเสียหายได้ จึงควรเลือกใช้ symlink เพื่อคงพาธเดิมไว้จะดีกว่า |
| ฉันจำเป็นต้องสำรองข้อมูลทั้งหมดหรือไม่? | ใช่แล้ว เอกสารการสำรองข้อมูลของ Nextcloud ประกอบด้วยการตั้งค่า ไดเร็กทอรีข้อมูล ฐานข้อมูล และข้อมูลแอปพลิเคชัน/ธีมที่กำหนดเองที่เกี่ยวข้อง อย่าใช้ดิสก์เก่าเป็นสำเนาการย้อนกลับเพียงอย่างเดียวของคุณ |
| ฮาร์ดไดรฟ์ภายนอกต้องใช้ระบบไฟล์ ext4 หรือไม่? | ขั้นตอนนี้ไม่ได้กำหนดระบบไฟล์ใดโดยเฉพาะ ตัวอย่างด้านล่างใช้ ext4 เนื่องจากพฤติกรรมการเป็นเจ้าของและการอนุญาตตามปกติของ Linux นั้นตรงไปตรงมา ระบบไฟล์อื่นๆ อาจต้องใช้ตัวเลือกการเมานต์ที่แตกต่างกัน |
ฉันควรวิ่งfiles:scan --allต่อหลังจากนั้นไหม? | โดยปกติแล้วจะไม่ใช้สำหรับการย้ายแบบรักษาเส้นทางไฟล์ ควรใช้เมื่อไฟล์หายไปจากแคชไฟล์จริง ๆ หรือเมื่อไฟล์ถูกคัดลอกไปยังโครงสร้างข้อมูลภายนอก Nextcloud และจำเป็นต้องสแกนใหม่ทันที |
| ฮาร์ดไดรฟ์ USB มีความน่าเชื่อถือเท่ากับฮาร์ดดิสก์ภายในเครื่องหรือไม่? | ขึ้นอยู่กับตัวเคส สายเคเบิล แหล่งจ่ายไฟ ระบบไฟล์ และโฮสต์ หากไดรฟ์แบบถอดได้ใช้งานไม่ได้ ถือเป็นความเสี่ยงด้านความพร้อมใช้งาน ดังนั้นควรตั้งค่าการเชื่อมต่อให้ถาวรและตรวจสอบให้แน่ใจก่อนเริ่มใช้งาน Nextcloud |
1. ติดตั้งฮาร์ดไดรฟ์ภายนอกในตำแหน่งที่มั่นคง
ขั้นแรกให้ระบุอุปกรณ์และระบบไฟล์ ใน Linux คำสั่งต่างๆ เช่น `fstab` lsblk -fและblkid`fstab` จะแสดง UUID ของระบบไฟล์ หลีกเลี่ยงการสร้างการกำหนดค่าถาวรโดยใช้ชื่ออุปกรณ์ เช่น/dev/sdb1`/etc/fstab` เพราะชื่ออุปกรณ์ใน Linux อาจเปลี่ยนแปลงได้เมื่อมีการเพิ่มฮาร์ดแวร์หรือลำดับการตรวจจับเปลี่ยนแปลงคู่มือ `fstab` ของ Linux แนะนำให้ใช้ตัวระบุ UUID หรือ LABEL สำหรับการเมานต์แบบถาวร
lsblk -f
sudo blkid /dev/sdb1
sudo mkdir -p /mnt/nextcloud-data-storage
เพิ่มรายการที่เหมาะสมลงใน/etc/fstabไฟล์ . แทนที่ UUID และประเภทระบบไฟล์ตัวอย่างด้วยค่าจากดิสก์ของคุณเอง:
UUID=YOUR-FILESYSTEM-UUID /mnt/nextcloud-data-storage ext4 defaults 0 2
จากนั้นทดสอบการเชื่อมต่อก่อนที่จะใช้งาน Nextcloud:
sudo mount -a
findmnt /mnt/nextcloud-data-storage
df -h /mnt/nextcloud-data-storage
ตรวจสอบดิสก์ภายนอกด้วย UUID และยืนยันจุดเชื่อมต่อก่อนที่จะย้ายไฟล์ Nextcloud ใดๆ
ความเข้าใจผิดที่พบบ่อย: การมีชื่อไดเร็กทอรี/mnt/nextcloud-data-storageไม่ได้หมายความว่าดิสก์ถูกเมานต์อยู่ที่นั่น หากไดรฟ์หายไป ไดเร็กทอรีจุดเมานต์ก็ยังคงอยู่บนดิสก์ระบบได้วิธีแก้ไข:ใช้findmntหรือmountpointทุกครั้งที่คุณทดสอบการย้ายข้อมูลและหลังจากรีบูตเครื่อง
2. สำรองข้อมูล Nextcloud และหยุดการเขียนข้อมูล
คู่มือการสำรองข้อมูลปัจจุบันของ Nextcloud ระบุว่า การสำรองข้อมูลที่สามารถกู้คืนได้นั้นรวมถึงไดเร็กทอรีข้อมูล การกำหนดค่า ฐานข้อมูล และเนื้อหาเฉพาะการใช้งานอื่นๆ เช่น แอปและธีมที่กำหนดเอง ตรวจสอบเอกสารการสำรองข้อมูลอย่างเป็นทางการของ Nextcloudและตรวจสอบให้แน่ใจว่าได้จัดเก็บข้อมูลสำรองไว้ในที่อื่นที่ไม่ใช่ไดรฟ์ที่คุณกำลังจะแบ่งพาร์ติชั่นใหม่หรือนำไปใช้งานใหม่
ถัดไป ให้เปิดใช้งานโหมดบำรุงรักษาจากไดเร็กทอรีการติดตั้ง Nextcloud บน Debian และ Ubuntu บัญชีเว็บเซิร์ฟเวอร์มักจะเป็นwww-data:
cd /var/www/nextcloud
sudo -E -u www-data php occ maintenance:mode --on
คำแนะนำในการย้ายข้อมูลยังระบุด้วยว่าไม่ควรเรียกใช้ cron job ใดๆ ในระหว่างการย้าย และแนะนำให้หยุดเว็บเซิร์ฟเวอร์/แอปพลิเคชันเซิร์ฟเวอร์ในขณะที่กำลังย้ายข้อมูล วิธีการทำเช่นนั้นขึ้นอยู่กับการใช้งาน: Apache, Nginx บวก PHP-FPM, Docker Compose, Snap, AIO และ Kubernetes ต่างก็มีขอบเขตการให้บริการที่แตกต่างกัน
ขั้นตอนการดำเนินการ:ปิดใช้งานรายการ cron ของ Nextcloud หรือหยุดบริการ cron ที่เกี่ยวข้อง จากนั้นหยุดบริการเว็บ/แอปก่อนทำการคัดลอกขั้นสุดท้าย หากชุดข้อมูลมีขนาดใหญ่มาก คุณสามารถคัดลอกข้อมูลไปยังดิสก์ภายนอกล่วงหน้าในขณะที่เว็บไซต์ออนไลน์อยู่ จากนั้นเข้าสู่โหมดบำรุงรักษา หยุดการเขียนข้อมูล และเรียกใช้การrsyncคัดลอกขั้นสุดท้ายเพื่อบันทึกการเปลี่ยนแปลง
3. คัดลอกไดเร็กทอรีข้อมูลทั้งหมด รวมถึงไฟล์ที่ซ่อนอยู่
อย่าคัดลอกเฉพาะโฟลเดอร์ผู้ใช้เท่านั้น โฟลเดอร์ข้อมูลยังประกอบด้วยไฟล์ที่ซ่อนอยู่ เช่น.ncdataข้อมูลแอปพลิเคชัน ซึ่งเป็นส่วนหนึ่งของพื้นที่จัดเก็บข้อมูล Nextcloud จะระบุไฟล์ที่ซ่อนอยู่/ไฟล์ที่มีนามสกุล .dot อย่างชัดเจนในขั้นตอนการย้ายข้อมูล
สมมติว่าไดเร็กทอรีปัจจุบันคือ/var/www/nextcloud/dataและดิสก์ภายนอกถูกเมานต์อยู่ที่/mnt/nextcloud-data-storageสร้างปลายทางและคัดลอกไดเร็กทอรี:
sudo mkdir -p /mnt/nextcloud-data-storage/data
sudo rsync -Aax --info=progress2 /var/www/nextcloud/data/ /mnt/nextcloud-data-storage/data/
เอกสารการกู้คืนของ Nextcloud ใช้rsync -Aaxการรักษาโครงสร้างไดเร็กทอรีและข้อมูลเมตาเป็นตัวอย่าง สำหรับการติดตั้งขนาดใหญ่มาก ให้ทำการกู้คืนรอบที่สองหลังจากหยุดการเขียนข้อมูลทั้งหมดแล้ว และตรวจสอบผลลัพธ์ ตัวเลือกที่จำเป็นอาจแตกต่างกันไปหากแหล่งข้อมูลของคุณใช้ ACLs, คุณสมบัติเพิ่มเติม, ระบบไฟล์ที่ไม่ปกติ หรือพื้นที่จัดเก็บข้อมูลที่ติดตั้งในคอนเทนเนอร์
หยุดการเขียนข้อมูลในพื้นหลังและคัดลอกโครงสร้างข้อมูลทั้งหมด รวมถึงไฟล์เมตาเดต้าที่ซ่อนอยู่ของ Nextcloud ด้วย
ความเข้าใจผิดที่พบบ่อย:การคัดลอกเสร็จสมบูรณ์หมายความว่าการย้ายข้อมูลเสร็จสิ้นแล้ว ไม่ใช่เช่นนั้น Nextcloud ยังคงต้องการเส้นทางที่คาดหวัง และผู้ใช้ HTTP ต้องสามารถเข้าถึงและเขียนข้อมูลไปยังตำแหน่งใหม่ได้วิธีแก้ไข:ตรวจสอบจำนวนไฟล์หรือตรวจสอบค่า checksum ก่อนเปลี่ยนเส้นทาง และเก็บไดเร็กทอรีต้นทางไว้เหมือนเดิมจนกว่าพื้นที่จัดเก็บข้อมูลใหม่จะผ่านการทดสอบ
4. รักษาเส้นทางข้อมูลเดิมด้วยลิงก์สัญลักษณ์
นี่คือมาตรการด้านความปลอดภัยที่สำคัญ สมมติว่าปัจจุบัน Nextcloud ใช้:
'datadirectory' => '/var/www/nextcloud/data',
อย่าเปลี่ยนค่าดังกล่าวสำหรับการย้ายข้อมูลแบบรักษาเส้นทางที่แนะนำ ให้เก็บไดเร็กทอรีเก่าไว้เป็นสำเนาสำรอง และแทนที่ด้วยลิงก์สัญลักษณ์ที่ชี้ไปยังไดรฟ์ภายนอกแทน:
sudo mv /var/www/nextcloud/data /var/www/nextcloud/data.old
sudo ln -s /mnt/nextcloud-data-storage/data /var/www/nextcloud/data
ls -ld /var/www/nextcloud/data
Nextcloud อธิบายวิธีการใช้ symlink นี้ไว้ เนื่องจากที่เก็บข้อมูลภายในเครื่องจะถูกระบุด้วยพาธแบบสัมบูรณ์ เมื่อสร้างลิงก์แล้ว Nextcloud จะยังคงมองเห็นได้/var/www/nextcloud/dataแม้ว่าข้อมูลจะอยู่บนดิสก์ภายนอกก็ตาม
ตรวจสอบความเป็นเจ้าของก่อนทำการเปลี่ยนแปลงสิทธิ์การเข้าถึงในวงกว้าง:
stat -c '%U:%G %a %n' /var/www/nextcloud/data.old
stat -c '%U:%G %a %n' /mnt/nextcloud-data-storage/data
namei -l /mnt/nextcloud-data-storage/data
ผู้ใช้ HTTP ต้องสามารถเข้าถึงไดเร็กทอรีระดับบนและอ่าน/เขียนไดเร็กทอรีข้อมูลได้ เจ้าของที่ถูกต้องจะแตกต่างกันไปตามระบบปฏิบัติการและวิธีการติดตั้งเอกสาร occ ของ Nextcloud ระบุว่าบัญชี HTTP มักจะเป็นwww-dataบน Debian/Ubuntu apacheบน Fedora/CentOS และแตกต่างกันไปในระบบอื่นๆ
คงเส้นทางของไดเร็กทอรีข้อมูลเดิมไว้ และสร้างลิงก์สัญลักษณ์เพื่อชี้ไปยังดิสก์ภายนอก
ความเข้าใจผิดที่พบบ่อย:การเรียกใช้คำสั่งทั่วไปซ้ำๆ จะchmod 777แก้ไขสิทธิ์การเข้าถึงได้ แต่จริงๆ แล้วอาจซ่อนปัญหาที่แท้จริงไว้ ในขณะเดียวกันก็ลดความปลอดภัยลงวิธีแก้ไข:เปรียบเทียบความเป็นเจ้าของและสิทธิ์การเข้าถึงของไดเร็กทอรีใหม่กับของเดิม รักษา ACL ไว้หากมีการใช้งาน และทำการแก้ไขขั้นต่ำที่สุดเท่าที่จำเป็นสำหรับผู้ใช้ HTTP เท่านั้น
แล้วถ้าคุณต้องการเปลี่ยนแปลงจริงๆ ล่ะdatadirectory?
Nextcloud อธิบายขั้นตอนที่ไม่ต้องใช้สัญลักษณ์ลิงก์ แต่เอกสารเดียวกันนั้นระบุว่าไม่ได้รับการสนับสนุนและเตือนว่าอาจทำให้ฐานข้อมูลเสียหายได้ ขั้นตอนดังกล่าวต้องทำการเปลี่ยนแปลงconfig.phpและอัปเดตlocal::/old-data-dir/รายการที่ตรงกันในoc_storagesตารางด้วย
นั่นไม่ใช่เพียงแค่ไวยากรณ์ทางเลือกสำหรับการดำเนินการเดียวกันเท่านั้น แต่ยังเป็นการเปลี่ยนตัวระบุพื้นที่จัดเก็บที่ Nextcloud บันทึกไว้ภายในด้วย คำแนะนำ:ให้ใช้การสร้างลิงก์สัญลักษณ์ (symlink) เว้นแต่คุณจะมีข้อมูลสำรองที่ผ่านการทดสอบแล้ว กระบวนการกู้คืนที่ผ่านการทดสอบแล้ว และเหตุผลในการใช้งานเฉพาะที่ต้องลบเส้นทางข้อมูลเก่าออก สำหรับการติดตั้ง Nextcloud ใหม่ ให้เลือกตำแหน่งจัดเก็บข้อมูลสุดท้ายระหว่างการติดตั้งแทน Nextcloud ระบุไว้อย่างชัดเจนว่าวิธีนี้ง่ายกว่าการย้ายข้อมูลในภายหลัง
5. รีสตาร์ท ตรวจสอบการเชื่อมต่อ และนำ Nextcloud กลับมาใช้งานออนไลน์อีกครั้ง
ก่อนเริ่มใช้งาน Nextcloud โปรดตรวจสอบให้แน่ใจว่าระบบไฟล์ภายนอกได้ถูกเชื่อมต่ออย่างถูกต้อง และลิงก์สัญลักษณ์ (symlink) ชี้ไปยังระบบไฟล์นั้นได้:
findmnt /mnt/nextcloud-data-storage
readlink -f /var/www/nextcloud/data
sudo -E -u www-data test -r /var/www/nextcloud/data/.ncdata && echo readable
รีสตาร์ทบริการเว็บ/แอปพลิเคชัน และเปิดใช้งาน cron job ของ Nextcloud อีกครั้งโดยใช้วิธีการที่เหมาะสมกับการใช้งานของคุณ จากนั้นปิดโหมดบำรุงรักษาและตรวจสอบสถานะเซิร์ฟเวอร์:
cd /var/www/nextcloud
sudo -E -u www-data php occ maintenance:mode --off
sudo -E -u www-data php occ status
เข้าสู่ระบบและทดสอบการทำงานหลายอย่าง เช่น เปิดไฟล์ที่มีอยู่ อัปโหลดไฟล์ใหม่ เปลี่ยนชื่อไฟล์ ลบไฟล์ กู้คืนจากถังขยะ และตรวจสอบว่าไคลเอนต์อื่นสามารถซิงโครไนซ์ไฟล์ได้หรือไม่ รีบูตเครื่องโฮสต์หนึ่งครั้งแล้วทำซ้ำขั้นตอนfindmntนี้ เพื่อตรวจจับ/etc/fstabรายการที่ไม่ถูกต้องก่อนที่จะเกิดปัญหาขึ้นระหว่างที่ระบบขัดข้อง
หลังจากทำการเปลี่ยนระบบแล้ว ให้ตรวจสอบทั้งการเชื่อมต่อระบบปฏิบัติการและการทำงานของไฟล์ตามปกติใน Nextcloud
คุณต้องการอะไรocc files:scan --all?
ไม่อัตโนมัติเอกสารคำสั่งไฟล์ ของ Nextcloud ระบุว่าfiles:scanการอัปเดตแคชไฟล์สำหรับไฟล์ใหม่หรือไฟล์ที่เปลี่ยนแปลงจะมีประโยชน์หลังจากคัดลอกด้วยตนเอง หรือเมื่อตรวจสอบความไม่สอดคล้องกันของแคช การย้ายแบบรักษาเส้นทางที่ดำเนินการอย่างถูกต้องนั้นมีจุดประสงค์เพื่อให้ไฟล์และเส้นทางจัดเก็บข้อมูลภายในเครื่องเหมือนเดิม ดังนั้นการสแกนแบบเต็มจึงไม่ควรเป็นขั้นตอน "เผื่อไว้ก่อน" โดยค่าเริ่มต้น
ขั้นตอนการดำเนินการ:ขั้นแรกให้ทดสอบ UI และเปรียบเทียบไฟล์ที่คาดว่าจะได้รับ หากไฟล์หายไปจาก Nextcloud ทั้งๆ ที่ไฟล์เหล่านั้นมีอยู่บนดิสก์ ให้ใช้การสแกนแบบกำหนดเป้าหมาย หรือหากเหมาะสม ให้ใช้การสแกนแบบเต็มรูปแบบfiles:scan --allโปรดทราบว่าการสแกนแบบเต็มรูปแบบบนระบบขนาดใหญ่ อาจใช้เวลานานมาก
รายการตรวจสอบการย้ายข้อมูลขั้นสุดท้าย
- ฐานข้อมูล การกำหนดค่า และการสำรองข้อมูลปัจจุบันนั้นจัดเก็บอยู่ภายนอกดิสก์ที่จะทำการย้ายข้อมูล
- ระบบไฟล์ภายนอกมีการเชื่อมต่อที่เสถียรซึ่งกำหนดค่าโดย UUID หรือ LABEL
findmntยืนยันว่าไดรฟ์ภายนอกได้ถูกเชื่อมต่อเรียบร้อยแล้ว
- การเขียนข้อมูลลง Nextcloud และงาน Cron จะหยุดลงในระหว่างการซิงโครไนซ์ขั้นสุดท้าย
- ไดเร็กทอรีข้อมูลทั้งหมด รวมถึง ได้
.ncdataถูกคัดลอกเรียบร้อยแล้ว
- เส้นทางไฟล์ เดิม
datadirectoryจะถูกเก็บรักษาไว้ด้วยลิงก์สัญลักษณ์ (symlink)
- ผู้ใช้ HTTP สามารถเข้าถึงพาธการเมานต์และอ่าน/เขียนข้อมูลได้
- Nextcloud เริ่มทำงานโดยไม่มีข้อผิดพลาดเกี่ยวกับพื้นที่จัดเก็บข้อมูลและ
occ statusทำงานได้ตามปกติ
- การทดสอบการอัปโหลด การเปลี่ยนชื่อ การลบ การกู้คืน การดาวน์โหลด และการซิงค์ข้อมูลสำเร็จลุล่วงไปด้วยดี
- เซิร์ฟเวอร์ได้ถูกรีบูตไปแล้วหนึ่งครั้งเพื่อตรวจสอบว่าไดรฟ์ภายนอกเชื่อมต่อได้อย่างน่าเชื่อถือเมื่อเริ่มต้นระบบ
- ไดเร็กทอรีข้อมูลเก่าจะยังไม่ถูกลบจนกว่าการติดตั้งใหม่จะได้รับการทดสอบและสำรองข้อมูลแยกต่างหากแล้ว
แนวคิดที่สำคัญที่สุดนั้นเรียบง่าย: การย้ายข้อมูล Nextcloud ไม่ใช่แค่การคัดลอกระบบไฟล์เท่านั้น เส้นทางของไฟล์เป็นส่วนหนึ่งของข้อมูลประจำตัวพื้นที่จัดเก็บข้อมูลภายในเครื่องของ Nextcloud ดังนั้นควรเก็บรักษาเส้นทางนั้นไว้เมื่อเป็นไปได้ ทำให้ไดรฟ์ภายนอกเป็นจุดเชื่อมต่อระบบที่เชื่อถือได้ หยุดการเขียนข้อมูลในระหว่างการคัดลอกครั้งสุดท้าย และเก็บสำเนาสำรองไว้จนกว่าพื้นที่จัดเก็บข้อมูลใหม่จะผ่านการทดสอบแอปพลิเคชันและการรีบูตแล้ว