ไม่มีพื้นที่บนอุปกรณ์เมื่อลบไฟล์ภายใต้ OpenSolaris


10

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

svc.startd[9] Could not log for svc:/network/dns/mulitcast:default: write(30) failed with No space left on device?

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

$ rm filename
cannot remove 'filename' : No space left on device 

ฉันสามารถเข้าสู่ระบบใน "โหมดการบำรุงรักษา" แต่ไม่ใช่พรอมต์ผู้ใช้มาตรฐาน

ผลลัพธ์ของdfคือ:

rpool/ROOT/openindiana-baseline    4133493    4133493          0    100%   /
swap                              83097900      11028  830386872      1%   /etc/svc/volatile
/usr/lib/libc/libc_hwcap1.so.1     4133493    4133493          0    100%   /lib/libc.so.1

ผลลัพธ์ของmountคือ:

/ on rpool/ROOT/openindiana-baseline read/write/setuid/devices/dev:2d9002 on Wed Dec 31 16:00:00 1969
/devices on /devices read/write/setuid/devices/dev:8b40000 on Fri Jul 8 14:56:54 2011
/dev on /dev read/write/setuid/devices/dev:8b80000 on Fri Jul 8 14:56:54 2011
/system/contract on ctfs read/write/setuid/devices/dev:8c40001 on Fri Jul 8 14:56:54 2011
/proc on proc read/write/setuid/devices/dev:8bc0000 on Fri Jul 8 14:56:54 2011
/etc/mnttab on mnttab read/write/setuid/devices/dev:8c80001 on Fri Jul 8 14:56:54 2011
/etc/svc/volatile on swap read/write/setuid/devices/xattr/dev:8cc0001 on Fri Ju8 14:56:54 2011
/system/object on objfs read/write/setuid/devices/dev:8d00001 on Fri Jul 8 14:6:54 2011
/etc/dfs/sharetab on sharefs read/write/setuid/devices/dev:8d40001 on Fri Jul 14:56:54 2011
/lib/libc.s0.1 on /usr/lib/libc/libc_hucap1.s0.1 read/write/setuid/devices/dev:d90002 on Fri Jul 8 14:57:06 2011 

ผลลัพธ์ของ 'zfs list -t all' คือ:

rpool                                                       36.4G   0       47.5K   /rpool
rpool/ROOT                                                  4.23G   0         31K   legacy
rpool/ROOT/openindiana                                      57.5M   0       3.99G   /
rpool/ROOT/openindiana-baseline                             61K     0       3.94G   /
rpoo1/ROOT/openindiana-system-edge                          4.17G   0       3.98G   /
rpool/ROOT/openindiana-system-edge@install                  19.9M   -       3 38G   -
rpoo1/ROOT/openindiana-system-edge@2011-07-06-20:45:08      73.1M   -       3.57G   -
rpoo1/ROOT/openindiana-system-edge@2011-07-06-20:48:53      75.9M   -       3 82G   -
rpoo1/ROOT/openindiana-system-edge@2011-07-07-02:14:04      61K     -       3.94G   -
rpoo1/ROOT/openindiana-system-edge@2011-07-07-02:15:14      61K     -       3.94G   -
rpoo1/ROOT/openindiana-system-edge@2011-07-07-02:28:14      61K     -       3.94G   -
rpool/ROOT/openindiana-system-stable                        61K     0       3.94G   /
rpoo1/ROOT/pre_first_update_07.06                           108K    0       3 82G   /
rpool/ROOT/pre_second_update_07.06                          90K     0       3.57G   /
rpool/dump                                                  9.07G   0       9.07G   -
rpool/export                                                3.85G   0       32K     /export
rpool/export/home                                           3.85G   0       32K     /export/home
rpool/export/home/admin                                     3.85G   0       3.85G   /export/home/admin
rpool/swap                                                  19.3G   19.1G   126M    -

1
ดูเหมือนว่าระบบไฟล์หรือพูลที่บันทึกการเขียนเต็ม ระบบไฟล์และองค์กรดิสก์บนเซิร์ฟเวอร์คืออะไร? คุณยังสามารถล็อกอินเข้าสู่เซิร์ฟเวอร์ (ดูเหมือนว่าคุณกำลังบอกว่าไม่ แต่คุณบอกว่าคุณพยายามลบไฟล์)? คุณหมายถึงอะไรโดย“มันทำให้ฉันมีข้อผิดพลาดไม่มีช่องว่างเมื่อฉันพยายามและสิ่งที่ลบ”: สิ่งที่คำสั่งว่าไม่คุณพิมพ์และสิ่งที่แน่นอนข้อผิดพลาดที่คุณได้รับ?
Gilles 'หยุดความชั่วร้าย'

อัปเดตโพสต์เพื่อตอบคำถามของคุณ
Nick Faraday

ตกลง. ดังนั้นกรุณาโพสต์การส่งออกของและdf mountคุณรู้อะไรเกี่ยวกับการกำหนดค่าของเซิร์ฟเวอร์นั้น โดยเฉพาะเกี่ยวกับการกำหนดค่าการบันทึกหรือไม่
Gilles 'หยุดความชั่วร้าย'

อัปเดตและเพิ่มข้อมูลเอาต์พุตที่ร้องขอ ... ขอบคุณที่รับชม!
นิคฟาราเดย์

โปรดเพิ่มผลลัพธ์ของzfs list -t all
jlliagre

คำตอบ:


13

ตกลงนั่นเป็นเรื่องแปลก…เนื้อที่ไม่เพียงพอที่จะลบไฟล์!

สิ่งนี้กลายเป็นปัญหาทั่วไปของ ZFS แม้ว่ามันจะเกิดขึ้นกับระบบไฟล์ที่มีส แนปชอตก็ตาม

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

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

การแก้ไขที่สามารถทำได้โดยทั่วไปคือการลบสแนปชอตบางส่วน คุณสามารถแสดงรายการภาพรวมzfs list -t snapshotได้ ดูเหมือนจะไม่มีวิธีที่ง่ายในการคาดการณ์ว่าจะสามารถคืนพื้นที่ได้มากน้อยเพียงใดถ้าคุณทำลายสแนปชอตโดยเฉพาะเนื่องจากสแนปชอตอื่น ๆ ที่เก็บข้อมูลอาจกลายเป็นข้อมูลที่จำเป็น zfs destroy name/of/snap@shotดังนั้นสำรองข้อมูลของคุณไปยังดิสก์อื่นหากจำเป็นต้องระบุอย่างน้อยหนึ่งหรือมากกว่าภาพรวมที่คุณไม่ต้องการอีกต่อไปและวิ่ง

มีการขยายการสนทนาของปัญหานี้อยู่ในOpenSolaris หัวข้อฟอรั่มนี้


3
ความสามารถในการจับภาพไม่ใช่สาเหตุของปัญหา - ดูคำตอบของฉันด้านล่าง แต่ความสามารถในการปล่อยภาพรวมสามารถทำงานปาฏิหาริย์ในการแก้ปัญหาตามที่คุณได้อธิบายอย่างถูกต้อง :)
Tatjana Heuser

8

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

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

วิธีออกจากการบีบ:

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

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


1

4.Z3G (คอลัมน์ rpool / root USED) น่าสงสัย

ไม่ว่าในกรณีใด rpool / export / home / admin ที่มีขนาดใหญ่เกินไป (3.85 GB) น่าจะเป็นต้นเหตุ ดูเนื้อหาและลบไฟล์ที่ไม่จำเป็นออกจากที่นั่น เนื่องจากระบบไฟล์ผู้ดูแลระบบไม่มีสแนปชอตจึงควรเพิ่มพื้นที่ว่างในพูลทันที


ยานั่นควรจะเป็น '2' ไม่ใช่ az (OCR'd img) มีอะไรแปลกเมื่อฉัน cd to / rpool ไม่มีอะไรในนั้น? ฉันไม่คิดว่า "โหมดการบำรุงรักษา" จะทำการเชื่อมโยงที่เหมาะสม! ไม่มีอะไรใน / ส่งออกอย่างใดอย่างหนึ่ง
นิคฟาราเดย์

ผู้ดูแลระบบควรจะติดตั้งบน / export / home / admin ไม่ใช่ใน / rpool คุณอาจเมานท์แบบแมนนวลหากไม่อยู่ในโหมดบำรุงรักษา
jlliagre

0

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

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

for file in core*[0-9]
do
    coreFile=${file%.[0-9]*}

    mv $file $coreFile
    if [[ $? == 0 ]]
    then
        chmod 644 $coreFile
    else
        truncate -s 0 $file # we can't just delete if disk is full so zero out first
        rm $file
    fi
done

เมื่อฉันรันสคริปต์มันทำให้เกิดข้อผิดพลาดอย่างหนึ่ง:

mv: cannot rename core.200000 to core: No space left on device

และเป็นการทำงานการล้างไฟล์

เพื่อทดสอบนี้ฉันเติมดิสก์ด้วย:

for ((ii=0; ii<100000; ii++))
do
    mkfile 1m core.$ii
done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.