จะเรียกใช้ checkdisk ได้อย่างไร?


84

ฉันสงสัยว่าอาจมีเซ็กเตอร์ที่ไม่ดีบนดิสก์ ฉันใช้ระบบไฟล์ ext3

เครื่องมือใดเทียบเท่ากับเครื่องมือตรวจสอบข้อผิดพลาดที่ดีที่สุดของ Windows


@PabloBianchi: คำถามนั้นมีขอบเขตเดียวกันทั้งหมด ฉันกำลังตั้งค่าสถานะให้ mod รวมเข้าด้วยกัน
David Foerster

คำตอบ:


101

ดิสก์

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

โปรแกรมรวมอยู่ในgnome-disk-utilityแพ็คเกจ วิ่งgksudo gnome-disks

สมาร์ทจาก Palimpsest

หรือใน Ubuntu รุ่น 16.04 (3.18):

SMART จากดิสก์

badblocks

คุณยังสามารถใช้ badblocks

sudo badblocks -sv /dev/sda

เพื่อตรวจสอบหรือตรวจสอบและแก้ไขก่อนเขียนผลลัพธ์ไปยังไฟล์ชั่วคราว:

sudo badblocks -sv /dev/sda  > bad-blocks-result
sudo fsck -t ext4 -l bad-blocks-result /dev/sda1

จะตรวจสอบทั้งดิสก์และพิมพ์ออกมาบล็อกเสียทั้งหมดที่พบใน/ dev / SDA

จากbadblocksคู่มือ:

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

fsck

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


1
จริงๆแล้วคู่มือของแบดบล็อกขัดขวางไม่ให้ใช้โดยตรงและนำผู้ใช้ไปยัง e2fsck ด้วยตัวเลือก "-c" (สำหรับการตรวจสอบอย่างอ่านอย่างเดียว) หรือตัวเลือก "-cc" (สำหรับการตรวจสอบการเขียนเพื่ออ่าน)
mrówa

2
ตามหมายเหตุใน 13.04 คุณเรียกใช้ palimpsest เพียงแค่เรียกใช้ "ดิสก์" จากเมนูอูบุนตู แต่ ... ฉันไม่เห็นตัวเลือกในการเปิดตัวทดสอบตัวเอง (อาจเป็นเพราะฉันมีไดรฟ์เพียงตัวเดียว Ubuntu ... )
rogerdpack

2
@ mrówaคู่มือเพียงบอกว่าจะทำเช่นนั้นถ้า "ผลลัพธ์ของ badblocks จะถูกป้อนไปยังโปรแกรม e2fsck หรือ mke2fs"
Jon

1
ใส่ข้อมูลที่จะแสดงรายการดิสก์ทั้งหมดใช้ sudo fdisk -l
Kangarooo

2
ตอนนี้เรียกว่า gnome-disk
endolith

74

/dev/sdcตลอดคำตอบนี้ฉันจะสมมติว่าไดรฟ์จัดเก็บข้อมูลจะปรากฏเป็นอุปกรณ์ป้องกันที่เส้นทาง ในการค้นหาเส้นทางของไดรฟ์เก็บข้อมูลในการตั้งค่าปัจจุบันของเราให้ใช้:

  • Gnome Disks ติดตั้งดิสก์ Gnome (ชื่อเดิมคือ Gnome Disk Utility, aka palimpsest) หากมี GUI อยู่หรือ
  • ที่เทอร์มินัลดูที่เอาต์พุตlsblkและls -l /dev/disk/by-idและพยายามค้นหาอุปกรณ์ที่เหมาะสมตามขนาดการแบ่งพาร์ติชันผู้ผลิตและชื่อรุ่น

ตรวจสอบขั้นพื้นฐาน

  • ตรวจพบเฉพาะสื่อที่ไม่ตอบสนองทั้งหมดเท่านั้น
  • เกือบจะทันที (เว้นแต่สื่อจะถูกปั่นหรือแตก)
  • ปลอดภัย
  • ใช้งานกับสื่อแบบอ่านอย่างเดียว (เช่น CD, DVD, BluRay)

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

sudo dd if=/dev/sdc of=/dev/null count=1

หากคำสั่งนี้ส่งผลให้มีข้อความเกี่ยวกับ "ข้อผิดพลาดอินพุต / เอาต์พุต" แสดงว่าไดรฟ์ของเราเสียหรือไม่เช่นนั้นจะไม่สามารถโต้ตอบกับเคอร์เนล Linux ได้ตามที่คาดไว้ ในกรณีก่อนหน้านี้มีโชคเล็กน้อยผู้เชี่ยวชาญด้านการกู้คืนข้อมูลพร้อมห้องปฏิบัติการที่มีอุปกรณ์ครบครันสามารถกู้เนื้อหาได้ ในกรณีหลังระบบปฏิบัติการที่แตกต่างมีค่าลอง (ฉันเจอไดรฟ์ USB ที่ทำงานบน Windows โดยไม่มีไดรเวอร์พิเศษ แต่ไม่ใช่ใน Linux หรือ OS X)

SMART ทดสอบตัวเอง

  • ปรับความทั่วถึง
  • ทันทีถึงช้าหรือช้าลง (ขึ้นอยู่กับความละเอียดของการทดสอบ)
  • ปลอดภัย
  • เตือนเกี่ยวกับความล้มเหลวที่อาจเกิดขึ้นในอนาคตอันใกล้

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

แหล่งข้อมูลเพิ่มเติมและคำแนะนำ:

ตรวจสอบอย่างเดียว

  • ตรวจพบข้อผิดพลาดของสื่อแฟลชบางอย่างเท่านั้น
  • ค่อนข้างน่าเชื่อถือสำหรับฮาร์ดดิสก์
  • ช้า
  • ปลอดภัย
  • ใช้งานกับสื่อแบบอ่านอย่างเดียว (เช่น CD, DVD, BluRay)

เพื่อทดสอบความถูกต้องในการอ่านของอุปกรณ์ทั้งหมดโดยไม่ต้องเขียนลงไปเราสามารถใช้badblocks(8)ดังนี้:

sudo badblocks -b 4096 -c 4096 -s /dev/sdc

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

หมายเหตุสำหรับการใช้งานขั้นสูง: หากเราต้องการนำเอาท์พุทกลับมาใช้ใหม่e2fsckเราจำเป็นต้องกำหนดขนาดบล็อก ( -b) เป็นขนาดของระบบไฟล์ที่มีอยู่ นอกจากนี้เรายังสามารถปรับแต่งปริมาณข้อมูล ( -cในบล็อก) ทดสอบในครั้งเดียวเพื่อปรับปรุงปริมาณงาน 16 MiB ควรจะไม่เป็นไรสำหรับอุปกรณ์ส่วนใหญ่

การตรวจสอบการอ่านและเขียนแบบไม่ทำลาย

  • ถี่ถ้วนมาก
  • ช้าที่สุด
  • ค่อนข้างปลอดภัย (ยกเว้นกรณีไฟฟ้าขัดข้องหรือเคอร์เนลเป็นระยะ ๆ )

บางครั้ง - โดยเฉพาะอย่างยิ่งกับสื่อแฟลช - มีข้อผิดพลาดเกิดขึ้นเมื่อพยายามเขียน (สิ่งนี้จะไม่ค้นพบสื่อที่น่าเชื่อถือ (แฟลช) ที่โฆษณาขนาดใหญ่กว่าที่เป็นจริงใช้Fight Flash Fraudแทน)

  • ไม่เคยใช้วิธีนี้ในไดรฟ์ที่มีการติดตั้งระบบไฟล์ ! badblocksปฏิเสธที่จะทำงานกับสิ่งเหล่านั้นต่อไปเว้นแต่คุณจะบังคับ

  • อย่าขัดจังหวะการทำงานนี้อย่างเด็ดขาด ! Ctrl+ C(SIGINT / SIGTERM) และรอการยกเลิกก่อนกำหนดที่สง่างามก็โอเค แต่killall -9 badblocks(SIGKILL) ไม่ใช่ เมื่อสิ้นสุดการบังคับbadblocksไม่สามารถเรียกคืนเนื้อหาต้นฉบับของช่วงบล็อกที่ทดสอบในปัจจุบันและจะปล่อยให้มันเขียนทับด้วยข้อมูลขยะและอาจทำให้ระบบไฟล์เสียหาย

หากต้องการใช้การตรวจสอบการอ่าน - เขียนแบบไม่ทำลายเพิ่ม-nตัวเลือกในbadblocksคำสั่งด้านบน

การตรวจสอบการอ่าน - เขียนแบบทำลายล้าง

  • ถี่ถ้วนมาก
  • ช้าลง
  • ลบข้อมูลทั้งหมดบนไดรฟ์

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

ที่จะใช้ทำลายการตรวจสอบการอ่านเขียนเพิ่ม-wตัวเลือกในการดังกล่าวข้างต้นbadblocksคำสั่ง


43

fsck - ตรวจสอบและซ่อมแซมระบบไฟล์ Linux เรียกใช้โดยใช้

fsck /dev/sda1

โดยที่ / dev / sda1 เป็นไดรฟ์ที่คุณต้องการตรวจสอบ ดู 'man fsck' สำหรับรายละเอียดเพิ่มเติม

นอกจากนี้ยังมีคำสั่ง 'แบดบล็อค' ที่ตรวจสอบอุปกรณ์คุณเดาได้ว่าบล็อกที่ไม่ดี

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

sudo touch /forcefsck
sudo reboot

หรือคุณสามารถบูตจาก Live CD และเรียกใช้การตรวจสอบจากที่นั่น


ขอบคุณเครื่องทำงานโดยไม่มีจอภาพมีวิธีเข้าถึงเอาต์พุตของการตรวจสอบหลังจากรีบูตหรือไม่
Guillaume Coté

ฉันสร้างไฟล์และรีบูท แต่มันก็เร็วมากและไม่มีอะไรใหม่ใน boot.log
Guillaume Coté

fsck ทำการตรวจสอบอย่างรวดเร็วมากฉันลองใช้ตัวเลือก -c เพื่อตรวจสอบบล็อกที่ไม่ดี
Guillaume Coté

fsck -c เพิ่งกล่าวว่า: / dev / sda9: การอัปเดตไอดีบล็อก ฉันไม่มีข้อมูลเกี่ยวกับจำนวนโหนดที่ไม่ดีและสัดส่วนของระบบไฟล์ที่พวกเขาเป็นตัวแทน
Guillaume Coté

sudo dumpe2fs -b /dev/sda9. แต่ฉันคิดว่ามันจะดีกว่าถ้าดิสก์ดูแลเซ็กเตอร์ที่ผิดปกติไม่ใช่ระบบไฟล์ (สมาร์ทแบดบล็อก ฯลฯ ดูโพสต์ของฉัน)
จัด

20

badblocks

คุณสามารถตรวจสอบ badblocks ที่รันคำสั่งได้

  1. sudo badblocks -nsv /dev/[device-partition] > bad-blocks-resultสำหรับการทดสอบการอ่าน - เขียนแบบไม่ทำลาย ที่จะสร้างไฟล์ที่เรียกว่าbad-blocks-resultเซกเตอร์เสียหาย
    • -nใช้โหมดอ่าน - เขียนแบบไม่ทำลาย โดยค่าเริ่มต้นจะทำการทดสอบอ่านอย่างเดียวแบบไม่ทำลายเท่านั้น

    • -sแสดงความคืบหน้าของการสแกนโดยการเขียนเปอร์เซ็นต์ความสมบูรณ์ของแบดบล็อกปัจจุบันให้สมบูรณ์ผ่านดิสก์

    • โหมดv- verbose

  2. จากนั้นคุณสามารถเรียกใช้sudo fsck -t ext3 -l bad-blocks-result /dev/[device-partition]เพื่อบอกระบบไฟล์ว่าเซกเตอร์เสียอยู่ที่ไหนและย้ายข้อมูลออกไปจากพวกเขาถ้าเป็นไปได้

คุณสามารถหาอ่านเพิ่มเติมเกี่ยวกับมันนี่


1
หากต้องการดำเนินการกับ badblock ในภายหลังหรือหากคุณลืมที่จะส่งออกเซกเตอร์เสียไปยังไฟล์ข้อความ (เช่นฉัน) คำตอบนี้จะช่วยคุณ: superuser.com/a/693000/218025
chelder

ฉันสามารถใช้ badblocks เพื่อตรวจสอบพาร์ทิชัน windows ของฉัน หรือมันจะสร้างความเสียหายอย่างใด?
ส่วนตัว

1
@ ส่วนบุคคลหากคุณมีคำถามใหม่โปรดใช้ลิงก์ "ถามคำถาม" ที่ด้านบน
จอห์น

fsckคำสั่งล้มเหลวด้วยbtrfsระบบไฟล์
Luís de Sousa

20

smartctl

IMO smartctl เป็นเครื่องมือที่ดีกว่า คุณน่าจะต้องติดตั้งมันก่อน

sudo apt-get install smartmontools 

แล้วก็

sudo smartctl -a /dev/sda | less

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

sudo smartctl -H /dev/sda

เพียงพิมพ์ข้อมูลสุขภาพ

ในการเริ่มต้นการทดสอบตัวเองสั้น ๆ (ไม่กี่นาที) หรือยาว (ไม่เกินหลายชั่วโมง) แบบใหม่:

sudo smartctl -t [short|long]

GSsmartControl ( โฮมเพจ ) และดิสก์ Gnomeเป็นส่วนหน้าแบบกราฟิกหากคุณต้องการ

ดูสิ่งนี้ด้วย


5
ทางออกที่ดีถ้าอุปกรณ์รองรับสมาร์ท แฟลชไดรฟ์แบบถอดได้ (ราคาถูก) จำนวนมากและฮาร์ดไดรฟ์เก่า ๆ
David Foerster

ตอนแรกฉันถูกนิ่งงันเมื่อsmartctlรายงาน: "ไม่รู้จักบริดจ์ USB", "โปรดระบุประเภทอุปกรณ์ด้วยตัวเลือก -d" ผมพบว่าข้อมูลที่ฉันต้องการที่: smartmontools.org/wiki/Supported_USB-Devices
nobar

10

F3 (ต่อสู้กับการฉ้อโกง Flash)เป็นอีกตัวเลือกหนึ่งที่ควรตรวจจับแฟลชไดรฟ์ปลอมเพิ่มเติม (แฟลชไดรฟ์ที่มีความจุจริงตามสัดส่วนของความจุโฆษณา):

  1. ติดตั้ง F3

    sudo apt install f3
    
  2. ใส่ไดรฟ์ของคุณ

  3. เขียนข้อมูลการทดสอบไปยังพื้นที่ว่างบนไดรฟ์ (ตรวจสอบที่ไดรฟ์ของคุณจะติดตั้งอยู่ด้วยlsblk)

    f3write /media/$USER/D871-DD7C/
    
  4. อ่านข้อมูลการทดสอบ

    f3read /media/$USER/D871-DD7C/
    

อ้างอิง:

badblocks ทำงานได้ดี แต่ก็ไม่ได้รับการออกแบบมาสำหรับการตรวจสอบแฟลชไดรฟ์ปลอมและอาจจะไม่รายงานข้อผิดพลาดใด ๆ สำหรับพวกเขา


badblocksมี-wหรือมีfsckภาคเครื่องหมายเป็นไม่ดี / เสียหายดังนั้นพวกเขาจะไม่ใช้ f3 สามารถส่งคืนสิ่งที่ต้องการCorrupted: 16.01 MB (32784 sectors)แต่ทำเครื่องหมายว่าเป็นเซกเตอร์ที่ไม่ดีหรือไม่ หรือเรายังต้องมีบล็อกแบดเพื่อการนั้น ฉันพยายามด้วยdumpe2fs -bและดูเหมือนว่า id ไม่ได้ทำเครื่องหมาย
ปาโบล

4

คุณสามารถทดสอบอ่านดิสก์ทั้งหมดในขณะที่แสดงตัวบ่งชี้ความคืบหน้า:

time sudo pv /dev/sdc >/dev/null

ปัญหาดิสก์บางอย่างจะแจ้งให้ทราบเป็นข้อผิดพลาด I / O ที่รายงาน นี่เป็นสิ่งที่ดีกว่าddเนื่องจากตัวบ่งชี้ความคืบหน้าและเนื่องจากส่วนต่อประสานบรรทัดคำสั่งเป็นมาตรฐานที่มากกว่าเล็กน้อยและมีแนวโน้มที่จะพิมพ์ผิดเล็กน้อย โปรดทราบว่าเป็นพื้นและรุ่นที่เพิ่มขึ้นของpv catอาจไม่ได้ติดตั้งตามค่าเริ่มต้น แต่สามารถติดตั้งsudo apt-get install pvได้

วิธีการที่คล้ายกันคือการอ่านดิสก์ด้วยหนึ่งในเครื่องมือที่มีอยู่มากมายซึ่งตระหนักถึงข้อผิดพลาดของดิสก์ I / O โดยเฉพาะและมีคุณสมบัติของ "การพยายามกู้ข้อมูลที่ยาก" ค้นหาddrescueในผู้จัดการแพ็คเกจ


การดำเนินการนี้จะไม่ตรวจพบปัญหาที่ปรากฏขึ้นเฉพาะระหว่างการเข้าถึงเพื่อเขียนและจะไม่รายงานภูมิภาคที่ได้รับผลกระทบของสื่อบันทึกข้อมูลที่จะต้องแก้ไขหรือแก้ไขปัญหา dd count=1ก็ค่อนข้างเร็วนอกจากสื่อจัดเก็บข้อมูลจะเสียหายอย่างสมบูรณ์ (หรือไม่สนับสนุน)
David Foerster

ดูเพิ่มเติม:ddrescueview
nobar

ตั้งแต่ GNU coreutils 8.24+ ddมีตัวบ่งชี้ความคืบหน้าstatus=progressด้วย
Pablo A

1

หากคุณมีพาร์ติชันที่คุณไม่สามารถปล่อยข้อมูลให้ทำตามขั้นตอนเหล่านี้

  1. กำหนดพาร์ติชันที่คุณต้องการตรวจสอบเซกเตอร์เสียโดยใช้

$fdisk -l commnd

สมมติว่าพาร์ติชันที่จะตรวจสอบเรียกว่า / dev / sdPTC (พาร์ติชันเพื่อตรวจสอบ) และคุณมีพาร์ติชันอื่นเพื่อจัดเก็บผลลัพธ์ที่เมาท์บน / scan / resultPath / โฟลเดอร์

2. จากนั้นคุณสามารถเรียกใช้คำสั่งนี้

$sudo badblocks -v /dev/sdPTC > /scan/resultPath/badsectors.txt

ซึ่งจะกำหนดสิ่งที่เป็นบล็อกที่ไม่ดีของอุปกรณ์ที่กำหนดและเก็บไว้ในไฟล์ที่เรียกว่า badsectors.txt

  1. ตอนนี้คุณสามารถใช้fsckคำสั่งเพื่อบอก Ubuntu ไม่ให้ใช้เซกเตอร์เสียที่กล่าวถึงในไฟล์ badsectors.txt

$sudo fsck -l /scan_result/badsectors.txt /dev/sda

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


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

  1. $sudo apt-get install gnome-disk-utility

  2. $sudo gnome-disks

  3. ตรวจสอบและตรวจสอบอีกครั้งว่าไม่มีข้อมูลสำคัญในพาร์ติชันนั้น

  4. การใช้gnome-disksลบ / ลบพาร์ติชันด้วยมือโดยใช้เครื่องหมาย "-"

  5. การใช้gnome-disksCREATE พาร์ติชันใหม่และเลือกตัวเลือก "ช้า" ที่จะตรวจสอบข้อผิดพลาด

ป้อนคำอธิบายรูปภาพที่นี่


เป็นรุ่นของอูบุนตูหรือไม่? ไม่bionic beaverจัดการกับการตรวจสอบดิสก์แตกต่างกัน?
Gabriel Fair

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