[1] NCQ 선별적으로 강제로 끄기
How do I fix a boot error: "failed command: READ FPDMA QUEUED" https://answers.launchpad.net/ubuntu/+question/122588 P7P55D-E EVO 보드에 들어있는 Marvell 88SE9123 SATA-III 2포트 콘트롤러에 ST1000DM003 디스크를 2개 달고 Ubuntu Server 12.04.2 LTS를 설치하여 시험중인데, dmesg에 각종 오류메시지가 뜨곤 했다. 다 기록해두지는 못했는데, FPDMA 어쩌구 하는 오류와 CHS 0 어쩌구 하는 오류였다. 나중에는 오류가 너무 많아서 NCQ를 끈다는 메시지도 떴다. 중간에는 Btrfs 드라이버가 하드디스크 읽기 오류를 발견하여 보정했다는 메시지도 나왔다. [ 47.955485] ata7.00: exception Emask 0x0 SAct 0x7fffffff SErr 0x0 action 0x6 frozen 위의 글을 참조하여 /dev/default/grub 파일에 NCQ 끄는 옵션을 추가했다. 두 개의 SATA 포트에 대해 ncq를 꺼야 했으므로 위의 글과 함께 이 글과 이 글도 참고하여 아래와 같이 하고, GRUB_CMDLINE_LINUX="libata.force=7.00:noncq,8.00:noncq" ( 참고: 위의 예처럼 "libata.force=[ID:]VAL[,[ID:]VAL]" 형태의 지정방법을 쓰는데, 7.00이 ID이고 noncq는 VAL에 해당한다. ID는 PORT[.DEVICE] 형식으로 지정하며,
PORT까지만 지정하면 해당포트 및 거기에 매달린 링크/장치 전체에 적용되고 DEVICE까지 지정하면 해당포트의 특정 링크/장치에만 적용됨. 위의 예에서는 두 개의 포트에 대해, 장치까지 지정한 것이다 ) 수정사항이 부팅시에 반영되도록 아래 명령도 실행했다. $ sudo update-grub $ sudo grub-install /dev/sdg 그 결과로, dmesg를 확인해보면 아래와 같이 강제로 ncq가 꺼지게 되고, [ 1.119319] ata8: SATA link up 6.0 Gbps (SStatus 133 SControl 370) 아래와 같이 두 개의 HDD에 대해서만 NCQ가 꺼지고 queue_depth가 1로 설정된다. 이 상태에서는 2 이상의 값을 설정하려고 하면 오류가 발생한다. $ cat /sys/block/sd?/device/queue_depth 31 31 31 31 31 31 1 1 31 그런데, 이렇게 해서 막상 오류가 사라지는지는 더 지켜봐야 알겠음. ==> 지켜보니 며칠간 오류가 안 나타났다. ATA 포트 인식순서가 바뀜 ( 2013-08-08 에 알게 됨 ) ==> 언제부터인지 모르겠으나, 아마도 커널 업그레이드후부터, ata 포트 인식순서가 바뀌었다. ( Linux dev-ubuntu 3.5.0-37-generic #58~precise1-Ubuntu SMP Wed Jul 10 17:48:11 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ) 온보드 JMB363 PATA 포트가 ata1, ata2로 잡히고, 나머지 장치들은 모두 두 자리씩 뒤로 밀렸다. 덕분에 Marvell 88SE9123 포트에서 예의 그 오류가 발생하고 있었고, /etc/default/grub 파일의 설정도 아래와 같이 바꿔줘야 했다. GRUB_CMDLINE_LINUX="libata.force=9.00:noncq,10.00:noncq" ==> 부트 옵션 바꾸고 재부팅하기 어려울 때, 즉석에서 반영하려면 아래와 같이 하면 된다. https://lists.debian.org/debian-user/2009/07/msg02209.html $ sudo -i # echo 1 > /sys/block/sde/device/queue_depth # echo 1 > /sys/block/sdf/device/queue_depth ==> 아래 링크가 88SE9123 문제의 근본적인 해결에 도움이 될런지 모르겠다. 아직 안 해 봄. SR-2 - Marvell SATA-3 88SE9123 Firmware Updates http://forums.evga.com/SR2-Marvell-SATA3-88SE9123-Firmware-Updates-m2086469.aspx AHCI & RAID ROM Modules http://www.win-raid.com/t7f13-AHCI-amp-RAID-ROM-Modules.html ( Fernando's Win-RAID Forum (Storage Drivers - BIOS Modding)»BIOS Modding»BIOS modules (PCI ROM, EFI and others)»AHCI & RAID ROM Modules ) Marvell SATA 6G MV-91xx Controller Firmware Version 1.0.0.1038 http://www.station-drivers.com/index.php?option=com_remository&Itemid=353&func=fileinfo&id=1572&lang=en 이 펌웨어 및 동봉된 Marvell flash tool을 받아 P7P55D-E EVO 보드에서 해봤는데 뭔가 업데이트가 되는 것 같기는 한데 부팅해보면 Marvell 펌웨어 버전이 1.0.0.1038 이 아닌 이전 그대로 1.0.0.1025 으로 나온다. 그리고, Linux에서의 NCQ 오류에도 별 도움이 안 된다. Modding Asus P7P55D-E Bios http://www.win-raid.com/t956f16-Modding-Asus-P-P-D-E-Bios.html 이 보드에서 88SE9123 바이오스를 제대로 업데이트하려면 메인보드용 바이오스 이미지에 포함된 Marvell 펌웨어를 직접 수정해야 하는 것 같다. 그렇게 한다고 NCQ 오류가 사라질 지도 불확실. Marvell 88SE9128/9120/9125/9111/9110 - SATA 6Gb/s RAID Controllers http://datasheet.eeworld.com.cn/pdf/284665,MARVELL,88SE9128.pdf ==> 2015-11-13 : Bug 43160 - Marvell 88SE91xx controller: Exception, reset, I/O errors https://bugzilla.kernel.org/show_bug.cgi?id=43160 ==> 2015-11-13 : 바이오스 설정의 VT-d를 꺼서 해결할 수 있는 문제인가? (VT-d == IOMMU의 인텔식 기술명) --> 해 보니 해결 안 됨. "sudo btrfs scrub start -r /" 명령 실행 후 몇 분 지나자 바로 오류 쏟아짐. ㅇ 참고1: Ubuntu 12.04 LTS -> 14.04 LTS 로 업그레이드한 상태이고, 3.13.0-66-generic 커널을 씀. ㅇ 참고2: CentOS 7.1.1503, 3.10.0-229.20.1.el7.x86_64 커널에서도 마찬가지 오류가 생겼다. Marvel 88SE9123 on arch linux. Modules loaded but no disks [solved] https://bbs.archlinux.org/viewtopic.php?id=179006 DMA Read on Marvell 88SE9128 fails when Intel's IOMMU is on https://bugzilla.kernel.org/show_bug.cgi?id=42679 ==> 2015-11-13 : ㅇ 하드디스크 펌웨어 업데이트를 해봐도 오류는 그대로였다. ( 시게이트 ST1000DM003 모델인데, 아래 사이트에 일련번호 넣고 최신 펌웨어를 찾을 수 있었다 ) ( https://apps1.seagate.com/downloads/request.html?userPreferredLocaleCookie=en_US_ ) ㅇ 링크속도를 6Gbps -> 3Gbps 로 강제설정해도 마찬가지. ==> 2015-11-13 : [zfs-discuss] Getting started with eSata and enclosures http://list.zfsonlinux.org/pipermail/zfs-discuss/2014-December/020171.html 누군가가 자신의 경험을 잘 정리해 둔 글. ㅇ pmp와 ncq 지원하는 SATA 콘트롤러칩 - 88SX7042 PCIe 4-port : 매우 잘 동작한다고 함. 5포트 pmp 장치를 달고 300 ~ 350MB/s 로 동작한다고 함. - 88SE9123 PCIe 2-port : 둘 중 한 포트에만 pmp 장치가 동작한다고 함. 어느 포트든 상관없음. 동작은 잘 된다고 함. ( 하지만, 나는 이 콘트롤러에서 NCQ 오류를 겪었다. pmp는 시험해볼 장치가 없어서 모름 ) ㅇ FBS (FIS Based Switching) pmp 지원하는 포트멀티플라이어칩 - Sil3726 : 잘 동작한다고 함. (3.0 Gbps 1-to-5 CBS/FBS PMP) ==> 2015-11-13 : pmp 브리지칩 JMB321 : 6-port (5 for targets + 1 for hosts?) 3Gbps. FBS 지원?( ==> 지원안함) Mediasonic Probox HF2-SU3S2 에 쓰이는 듯. ==> 2015-11-20 : 아래 글을 보니 JMB321은 CBS만 지원한다고 한다. http://hardforum.com/showpost.php?s=d198144d5f3f9f7f4ea9cb9eac145a00&p=1039687178&postcount=23 아래 페이지에 JMicron의 포트멀티플라이어 칩들이 나온다. Surveillance Storage Device ( http://www.jmicron.com/solution05.html ) ㅇ JMB321 : 1 to 5-ports Serial ATA II Port Multiplier or a 5 to 1-port Serial ATA II Port Selector ㅇ JMB393 : 1 to 5-ports Serial ATA II RAID-5 Controller ㅇ JMB394 : 1 to 5-ports Serial ATA II RAID-5 Controller with LCM interfaces ㅇ JMB575 : 1 to 5-ports Serial ATA III Port Multiplier or a 5 to 1-port Serial ATA III Port Selector FBS가 명시적으로 언급된 것은 JMB575 하나뿐이다. ㅇ Supports command-based and FIS-based switching ==> 2015-11-26 : PEXSAT32 : 2 Port SATA 6 Gbps PCI Express SATA Controller Card http://www.startech.com/Cards-Adapters/HDD-Controllers/SATA-Cards/2-Port-PCI-Express-SATA-6-Gbps-Controller-Card~PEXSAT32 88SE9123은 아니고 88SE9128을 쓰는 확장카드인데, 어차피 비슷한 칩셋이고 Support 페이지에 최신 바이오스/드라이버 링크가 잘 정리되어 있어서 링크해둔다. 한 번에 한 포트에서만 포트 멀티플라이어를 쓸 수 있다고 명시되어 있다. "Only one port can use the Port Multiplier feature at a time." ==> 2015-11-26 : How to detect all 10 disk drives on 2 Port Multipliers attached to Marvell 88SE9130 based HBA? http://askubuntu.com/questions/501675/how-to-detect-all-10-disk-drives-on-2-port-multipliers-attached-to-marvell-88se9
http://unix.stackexchange.com/questions/244419/marvell-88se9128-9123-sata-card-weird-behaviour-opensuse 누구가 올린 질문에 내 경험을 담아 답변을 좀 달다가 알게 된 것인데, 88SE9128을 사용한 PCIe 카드(Startech PEXSAT32)에서 최신 버전인 1.0.0.1038 펌웨어를 올리고 3.13 버전 커널(아마도 Ubuntu 14.04)로 부팅했는데도 오류가 나온다고 한다. 9123이나 9128이나 비슷하니까 9123에서도 마찬가지일듯. 그냥 하드웨어의 버그일까. ------------ [2] Btrfs 부트파티션 재설치 사실은, 오류가 종종 나는 채로 며칠 내버려뒀더니 부트파일시스템이 좀 이상한 상태에 빠진 것 같았다. 그래서 이짓저짓 하다가 가능 파일시스템을 새로 만들기로 했다. 다만 그동안 손댄 설정상태는 유지하고 싶어서 아래와 같이 했다. 기존 부트파티션의 내용물을 백업해둔다. $ sudo tar -cpz --one-file-system -f /other_partition/root.tar.gz / $ sudo tar -cpz --one-file-system -f /other_partition/home.tar.gz /home 우분투 설치CD로 부팅하여 설치과정 진행하다가 파티션 설정과정에 이르면, Ctrl-Alt-F2 눌러 cmd prompt를 띄운다. 파일시스템을 새로 만들고 subvolume도 Ubuntu 설치시 쓰는 방식으로 만든다. # mkfs.btrfs -L root -m raid1 -d raid1 /dev/sdg1 /dev/sdh1 # btrfs device scan # btrfs mount /dev/sdg1 a # btrfs subvolume create a/@ # btrfs subvolume create a/@home 새로 만든 빈 파일시스템을 위에서 백업해두었던 내용물로 채운다. # cd a/@home # tar xzf /tmp/home.tar.gz # cd a/@ # tar xzf /tmp/root.tar.gz # sudo btrfs fi show Label: 'root' uuid: e397f1b7-0bcb-446a-8440-3739915f9531 Total devices 2 FS bytes used 1.48GB devid 1 size 915.51GB used 74.03GB path /dev/sdg1 devid 2 size 915.51GB used 74.01GB path /dev/sdh1 Btrfs Btrfs v0.19 위 명령의 결과에 나오는 (새로 만들어진) uuid를 기록해두고, /etc/fstab과 /boot/grub/grub.cfg 파일의 uuid를 위의 것으로 교체한다. 파일시스템 새로 만들때 guid가 바뀌었으므로 이렇게 해줘야 부팅이 가능하다. 이제 grub을 설치한다. 설치 전에 chroot 및 /proc, /dev, /sys 파일시스템 처리가 필요하다. # mount --bind /dev a/dev # mount --bind /sys a/sys # mount --bind /proc a/proc # chroot a bin/bash # grub-install /dev/sdg # grub-install /dev/sdh 이제 새로 구성된 btrfs RAID1 볼륨으로 부팅 가능하도록 grub 부트로더 설치가 끝났다. 재부팅하면 됨.
|
카테고리
이전블로그
최근 등록된 덧글
이곳을 기억하고 있군요...
by 시험さま at 06/18 블로그에 자주 오지 않.. by 시험さま at 01/21 안녕하세요 chroot /mnt.. by k1 at 12/29 오래된 글인가보네요. .. by ㅎㅁㅇㄴㅀ at 11/15 찌아찌아어 모음에는 한.. by 0950261319 at 09/26 찌아찌아어 모음에는 한.. by 0950261319 at 09/26 덕분에 일주일쨰 못풀던.. by mjh at 08/22 감사합니다ㅠㅠㅠㅠㅠ.. by byoul at 07/27 도움이 되었다는 덧글을.. by 시험さま at 05/04 감사합니다! pyinstaller .. by ㅇㅇ at 04/22 다른 가볼 데
|