문제있는 SATA 콘트롤러/HDD NCQ 끄기
[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
[   47.955508] ata7.00: failed command: READ FPDMA QUEUED
[   47.955525] ata7.00: cmd 60/08:00:f8:f6:c7/00:00:00:00:00/40 tag 0 ncq 4096 in
[   47.955525]          res 40/00:01:00:00:00/00:00:00:00:00/40 Emask 0x4 (timeout)
[   47.955546] ata7.00: status: { DRDY }
[   47.955556] ata7.00: failed command: READ FPDMA QUEUED
[   47.955571] ata7.00: cmd 60/08:08:88:f5:c7/00:00:00:00:00/40 tag 1 ncq 4096 in
[   47.955571]          res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[   47.955591] ata7.00: status: { DRDY }
[   47.955602] ata7.00: failed command: READ FPDMA QUEUED
[   47.955608] ata7.00: cmd 60/08:10:90:f5:c7/00:00:00:00:00/40 tag 2 ncq 4096 in
[   47.955608]          res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[   47.955616] ata7.00: status: { DRDY }
[   47.955620] ata7.00: failed command: READ FPDMA QUEUED
[   47.955626] ata7.00: cmd 60/08:18:98:f5:c7/00:00:00:00:00/40 tag 3 ncq 4096 in
[   47.955626]          res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)


위의 글을 참조하여 /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)
[    1.119451] ata7: SATA link up 6.0 Gbps (SStatus 133 SControl 370)
[    1.119740] ata8.00: FORCE: horkage modified (noncq)
[    1.119912] ata7.00: FORCE: horkage modified (noncq)
[    1.119982] ata8.00: ATA-8: ST1000DM003-1CH162, CC46, max UDMA/133
[    1.119993] ata8.00: 1953525168 sectors, multi 0: LBA48 NCQ (not used)
[    1.120153] ata7.00: ATA-8: ST1000DM003-1CH162, CC46, max UDMA/133
[    1.120163] ata7.00: 1953525168 sectors, multi 0: LBA48 NCQ (not used)


아래와 같이 두 개의 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
  • Maximum PD per Adapter: 6 (PD = Physical Devices)
  • Maximum VD per Adapter: 2 (VD = Virtual Devices)
  • Maximum PD per VD: 2
  • Maximum Port Multiplier: 1
  ==> 2015-11-27 : 88SE9123에 1.0.0.1038 펌웨어를 올려도 오류 안 없어질 듯.
        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 시험さま | 2013/04/25 12:42 | 컴퓨터 | 트랙백 | 덧글(0)
트랙백 주소 : http://chanik.egloos.com/tb/3947882
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >