ฉันบีบอัดเซิร์ฟเวอร์ทั้งหมดของฉันโดยไม่ตั้งใจ


10

เอาล่ะถ้าใครอยากเล่นเทพและทำปาฏิหาริย์

ดังนั้นฉันจึงได้รับมอบหมายให้สร้างสคริปต์ที่พบไฟล์ที่เก่ากว่า 6 เดือนซิปแล้วลบออก ในทางของฉันในการทำสคริปต์ tihs ฉันวิ่งนี้:

find / -type f -mtime -400 ! -mtime -180 | xargs gzip blablabla

และนั่นให้นามสกุลไฟล์. gz ทุกครั้ง ตอนนี้ฉันเลิกมันทันทีที่ฉันสังเกตเห็น แต่มันก็สายเกินไป เมื่อเสร็จสิ้นคำสั่งคำสั่ง bash ของฉันจะไม่ทำงานเพราะตัวแปร $ PATH ทำให้ตัวเองว่างเปล่า ฉันลองหลายสิ่งหลายอย่างก่อนที่จะรู้ว่าปัญหาคืออะไร

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

root (hd0,0)
setup (hd0)
kernel (hd0,0)/boot/vml[...]
initrd (hd0,0)/boot/initrd.im[...]

หลังจากที่ linux ของฉันบูตบางส่วน แต่ทำให้ฉันมีข้อผิดพลาด

Begin : Running /scripts/init-bottom ... mount : mounting /dev on /root/dev failed : No such file or directory
mount: mounting /sys/ on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed : No such file or directory
Target filesystem doesn't have requrested /sbin/init.
No init found. Try passing init= bootarg.

ฉันลองซ่อมระบบไฟล์ฉันได้บูทจาก LiveCDs / Rescue disk 3 ตัวฉันรัน boot-repair จากดิคที่แตกต่างกัน 2 ตัว ฉันบังคับ fscks ...

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

ฉันได้แอบซุ่มอยู่ในฟอรัม 3 วันติดต่อกันทั้งวันเพื่อหาทางออกที่เป็นไปได้และฉันก็ยังอยู่ในจุดเดียวกัน ... ช่วยด้วยใช่ไหม?


3
หากพวกเขากำลัง mysql db ของคุณไม่จำเป็นต้องบูต; ในกรณีนั้นฉันจะพยายามเมานต์ไดร์ฟเป็นสมาร์ทและคัดลอกไปยังไดเร็กทอรี / var / lib / mysql
user16081-JoeT

8
ล้างการติดตั้งบนอุปกรณ์เก็บข้อมูลใหม่ เมานต์ไดรฟ์เก่าถ่ายโอนข้อมูลตามต้องการ ฉันพนันได้เลยว่าการซ่อมจะไม่คุ้มค่ากับความพยายาม
Zoredache

7
นี่คือจุดที่คุณกู้คืนจากการสำรองข้อมูล และอย่าลืมหลีกเลี่ยงการกระทำที่ไม่ได้รับสิทธิพิเศษในฐานะผู้ใช้รูทในครั้งต่อไป
Magellan

1
because of version differences,ติดตั้งใหม่ด้วยรุ่นเดียวกันแน่นอน we have corruption issues,ข้อมูลของคุณอาจเสียหาย การซ่อมแซมระบบเพื่อให้สามารถบู๊ตได้จะไม่ช่วยคุณหากข้อมูลถูกทิ้งลงถังขยะ หากคำสั่ง gzip ของคุณบีบอัดไฟล์ฐานข้อมูลของคุณในขณะที่ฐานข้อมูลกำลังถูกใช้งานอยู่ดูเหมือนว่าจะหลีกเลี่ยงไม่ได้
Zoredache

5
หากซอฟต์แวร์ DB ของคุณกำลังทำงานในขณะที่คุณรันคำสั่งเหล่านั้นคุณอาจไม่สามารถกู้คืน DB ได้ Gzip จะมีการบีบอัดไฟล์อย่างมีความสุขจากนั้นจะยกเลิกการเชื่อมโยง แต่ซอฟต์แวร์ฐานข้อมูลของคุณยังคงเปิดไฟล์อยู่และกำลังทำการเปลี่ยนแปลงอยู่ ทันทีที่หยุดทำงานไฟล์จะถูกลบออก
toppledwagon

คำตอบ:


8

สิ่งนี้จะขึ้นอยู่กับว่าระบบไฟล์นั้นได้รับการซ่อมแซมเพียงพอสำหรับคุณหรือไม่ที่จะติดตั้งพาร์ติชันเหล่านั้นจาก LiveCD ยังไม่ต้องพยายามบูทระบบ ก่อนอื่นให้เมาท์พาร์ติชั่นแล้วทำการแตกไฟล์. gz ทั้งหมด สิ่งนี้จะให้สำเนาการทำงานของ init และไบนารีระบบ จากนั้นคุณสามารถใช้ด้วงเพื่อซ่อมแซมบูตเซกเตอร์ จากนั้นบูตไปที่โหมดผู้ใช้คนเดียวและ fsck ระบบไฟล์อีกครั้ง หากใช้งานได้คุณจะมีระบบที่ใช้งานอยู่ นอกจากนี้คุณยังจะมีไฟล์ที่คลายซิปจำนวนหนึ่ง (เช่นหน้าคน) ที่ควรซิปจริง ๆ แต่ก็ดีกว่ามีระบบที่ไม่สามารถบู๊ตได้

หากคุณไม่สามารถติดตั้งพาร์ติชั่นจาก LiveCD แสดงว่าคุณโชคไม่ดี จะไม่มีการกู้คืนระบบของคุณในตอนนั้น


1
มันใช้งานได้จริงเหมือนมีเสน่ห์ ... ฉันไม่สามารถขอบคุณมากพอสำหรับสิ่งนี้! MySQL จะไม่บู๊ต แต่ฉันยังไม่ได้ --force fsck เลยหวังว่ามันจะแก้ไขได้! ขอบคุณ
Dexirian

1
น่ากลัว ดีใจที่มันช่วย
Michael Martinez

9

สิ่งแรกที่ฉันลองคือใช้สภาพแวดล้อม LiveCD และเพียงแค่พยายาม ungzip ทุกอย่างโดยหวังว่าจะทำให้ระบบกลับสู่สถานะที่สามารถบูตได้ หมายเหตุ: ฉันกังวลเกี่ยวกับความเสียหายของข้อมูลที่อาจเกิดขึ้นหากกระบวนการ gzip ดั้งเดิมถูกขัดจังหวะ

มิฉะนั้นฉันจะพยายามโยกย้ายฐานข้อมูลไปยังระบบใหม่ตามที่คนอื่น ๆ แนะนำ แต่เมื่อคุณพบอาจมีปัญหาการพึ่งพาแรงงานมากและปัญหาการกำหนดค่าที่จะต้องแก้ไขเป็นรายบุคคล


คำถามด่วน: เราไม่แน่ใจเกี่ยวกับเซิร์ฟเวอร์ฐานข้อมูล SQL เก่าและเซิร์ฟเวอร์ที่ใหม่กว่านั้นใช้ Linux Distro อื่น เซิร์ฟเวอร์รุ่นใหม่กำลังเรียกใช้ CentOS ด้วย WHM และเซิร์ฟเวอร์เก่าเป็น Debian / Unbuntu ดังนั้นคำถามของฉันคือฉันจะโยกย้ายฐานข้อมูล SQL ของฉันได้อย่างมีประสิทธิภาพโดยไม่มีความเสียหายและ whatnot อย่างไร
Dexirian

6

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

อย่างไรก็ตามจนถึงตอนนี้คุณมี initramfs (initrd) ที่ทำงานอยู่ เป็นการเริ่มต้นที่ดี แต่มันไม่สามารถทำแฮนด์ออฟให้เสร็จสมบูรณ์ได้เพราะ init ตอนนี้init.gzอาจจะใช่ไหม หากต้องการดำเนินการใด ๆ จะช่วยให้ทราบได้อย่างชัดเจนว่าการกระจาย Linux ของคุณคืออะไรดังนั้นเราสามารถค้นหาเครื่องมือที่มีอยู่ใน initramfs เพื่อใช้ในกรณีฉุกเฉิน

ข้อความแสดงข้อผิดพลาดที่คุณนำเสนอดูเหมือนว่าอาจมาจากต้นของเดเบียน ถ้าเป็น Debian คุณควรได้รับ(initramfs)shell prompt ในบรรทัดถัดไปหลังจากเกิดข้อผิดพลาดครั้งสุดท้าย ถ้าคุณทำคุณควรดูว่าเกิดอะไรขึ้นกับการเมาท์ที่ล้มเหลว จะ/root/devหายไป? ( /rootเป็นที่ที่รูทปกติของคุณควรติดตั้งในระหว่างการรันของ initramfs)

หากคุณไม่ได้รับพรอมต์เชลล์สิ่งที่เกิดขึ้นหลังจากนั้นNo init found. Try passing init= bootarg.จะน่าสนใจ แม้ว่ามันจะเป็นเพียงเคอร์เซอร์ที่กระพริบ แต่นั่นก็เป็นเบาะแส หากดูเหมือนว่าจะแช่แข็งโดยสิ้นเชิงลองรับข้อมูลบางอย่างเกี่ยวกับกระบวนการที่ยังคงอยู่โดยใช้ magic sysrq หรือ Ctrl + ScrollLock

Debian initramfs ยังช่วยให้คุณสามารถร้องขอเชลล์ได้ที่จุดสังเกตพิเศษบางแห่งด้วยการเพิ่มbreak=พารามิเตอร์ลงในบรรทัดคำสั่งเคอร์เนล ยกตัวอย่างเช่นการที่จะได้รับเปลือกก่อนที่จะสายใช้Running /scripts/init-bottombreak=bottom

นอกเหนือ: ฉันไม่ทราบว่าfindคำสั่งจะมี gzipped ทุกไฟล์ได้อย่างไร ... มันดูถูกต้องสำหรับการเลือกไฟล์ที่มีอายุระหว่าง 180 ถึง 400 วัน


เมื่อฉันทำ ls ใต้ / รูทไม่พบสิ่งใด ดังนั้นฉันสามารถใช้มันการติดตั้ง fs ไม่เป็นไรตอนบูต ฉันจะเปลี่ยนได้ที่ไหน
Dexirian

1
@Dexirian เพื่อให้คุณไม่ได้รับเปลือกพรอมต์ (คุณไม่ต้องใช้break=bottom?) ... ใช่ตามเวลาที่มันพยายามที่จะติดตั้ง/root/devและ/root/procและ/root/sys, /rootควรจะเป็นระบบแฟ้มรากจริง ต้องมีข้อความแสดงข้อผิดพลาดก่อนหน้านี้เกี่ยวกับความล้มเหลวในการติดตั้ง คุณรวมroot=พารามิเตอร์ในบรรทัดคำสั่งเคอร์เนลหรือไม่ หน่วยความจำของฉันเลือนเล็กน้อยในจุดนี้ แต่ฉันคิดว่าroot (hd0,0)เพียงแค่บอกด้วงว่าจะหาไฟล์สนับสนุนได้จากที่ใดและคุณยังต้องบอกเคอร์เนลแยกกันโดยที่รูทอยู่

ใช่ฉันใช้ root =, kernel = initrd =, และ setup =, ฉันไม่จำเป็นต้องใช้ break = bottom และฉันไม่พบข้อความเมานต์ที่ล้มเหลวก่อนหน้านี้เนื่องจากมันเลื่อนอย่างรวดเร็วจริงๆ
Dexirian

@Dexirian มีการเลื่อนคอนโซลด้วยหรือไม่ Shift + PgUp และคุณสามารถติดมันได้จากที่เขาบอก(initramfs) ไว้mount -r /dev/sda1 /rootใช่ไหม cat /proc/partitionsเพื่อดูว่ามีดิสก์อะไรบ้าง

1
ยินดีต้อนรับสู่โลกของการบริหารระบบ
Michael Martinez
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.