사용중인 시스템에 HDD 관련 커널에러가 발생하였다.

보통 여러가지 이유가 많지만, 이런 에러가 생기면 그냥 AS 보낸다.

그런데, 이번에는 디스크 관리를 보니 배드섹터 1 개 라고 나온다. 애매하네...
당장 시스템 교체할 하드가 마땅치 않아, AS 보내기전 잠시라도 계속 사용해야 하는 상황.

배드섹터를 기록(?)해서 에러가 발생하지 않도록 하고자 한다.

커널 에러 메세지는 이런식이다. (에러 종류에 따라 , 메시지가 다르다 )

[348303.307873] ata4: EH complete
[348305.814497] ata4.00: exception Emask 0x0 SAct 0x1000000 SErr 0x0 action 0x0
[348305.814503] ata4.00: irq_stat 0x40000008
[348305.814508] ata4.00: failed command: READ FPDMA QUEUED
[348305.814517] ata4.00: cmd 60/08:c0:78:3b:76/00:00:31:01:00/40 tag 24 ncq 4096 in
                         res 41/40:00:78:3b:76/00:00:31:01:00/40 Emask 0x409 (media error) <F>
[348305.814521] ata4.00: status: { DRDY ERR }
[348305.814524] ata4.00: error: { UNC }
[348305.815611] ata4.00: configured for UDMA/133
[348305.815625] sd 3:0:0:0: [sdc] tag#24 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[348305.815630] sd 3:0:0:0: [sdc] tag#24 Sense Key : Medium Error [current] [descriptor] 
[348305.815635] sd 3:0:0:0: [sdc] tag#24 Add. Sense: Unrecovered read error - auto reallocate failed
[348305.815639] sd 3:0:0:0: [sdc] tag#24 CDB: Read(16) 88 00 00 00 00 01 31 76 3b 78 00 00 00 08 00 00
[348305.815643] blk_update_request: I/O error, dev sdc, sector 5124799352

눈에 띄는 부분은 마지막줄.

blk_update_request: I/O error, dev sdc, sector 5124799352

배드 섹터가 생긴 것으로 보인다(다른 에러로 인해 나오는 경우도 있을 수 있을 듯 하다 - 입출력시 에러이니 다양한 원인이 있을 수 있음)


보통의 절차는 badblocks 로 배드섹터 위치를 찾고, fsck 로 배드섹터 표시를 해서 디스크사용시 해당 섹터를 건드리지 않도록 한다.

badblocks -v /dev/sdc1 > badsectors.txt

위 처럼 배드섹터 위치를 찾는다 ( /dev/sdc1 등은 본인의 HDD 명칭으로 쓰면 된다)
오래걸린다 (디스크 크기가 크면 클수록)
검색 범위를 정할 수 있는지 모르겠다. 2930265542

그 다음은 배드섹터를 파일시스템에 기록(?) 한다.

fsck.ext4 -l badsectors.txt  /dev/sdc1

fsck 명령은 본인의 파일시스템에 맞게 적절하게 바꿔준다. (fsck.ext2 , fsck.ext3 등)

끝.

이게 영구적인 해결방법은 아닐 듯 하다. 배드섹터가 계속 생길 수 있으니, AS 보내기 전까지 버텨보자.


추가

badblocks 가 너무 오래 걸린다. (거의 2시간 넘게 했는데, 반도 못했다. 6시간 넘게 걸릴 듯 하다 - 하드디스크 속도에 따라 차이가 있을 듯 함. 해당 HDD 는 7200 rpm )

badblocks -v /dev/sdc1 > badsectors.txt
Checking blocks 0 to 2930265542
Checking for bad blocks (read-only test): ^C

Interrupted at block 1102688832

block 범위를 정해서 다시 해본다. ( 전체가 5860533168 이다. 대략 배드섹터 위치는 5124799352 )

Disk /dev/sdc: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt

위 처럼 한 블럭이 512 byte ( badblocks 의 기본값은 1024 - 그래서 0 to 2930265542 으로 나옴)
그런데, 512 로 하면 다음과 같은 메시지가 나온다.

badblocks: 정의한 자료형으로 쓰기엔 너무 큰 값 invalid end block (5860531087): must be 32-bit value

기본값 1024 로 해야겠다. 대신 뒤의 블럭을 반으로 나눠서 범위를 정해야 겠다. ( 2562399676 가 된다)
그러고 보니 기본값을 fsck 쪽과도 맞춰야 할까? 파일시스템마다 다를려나? ( 4096 이 기본값인가? 5124799352 x 0.125 = 640599919 이 된다.)

# badblocks -b 4096 -v /dev/sdc1 640600000 640590000 > badsectors.txt
Checking blocks 640590000 to 640600000
Checking for bad blocks (read-only test): done                                                 
Pass completed, 1 bad blocks found. (1/0/0 errors)
# cat badsectors.4096.txt 
640599663

뒤의 숫자는 640599919 의 대략 범위 위치를 {last block} {first block} ( 끝 / 시작 값을 약간 여유 잡고 지정한다 )
실제 블록 위치는 640599663 로 확인된다.

fsck 를 해보니.

# fsck.ext4 -l badsectors.4096.txt /dev/sdc1
e2fsck 1.42.13 (17-May-2015)
/dev/sdc1: Updating bad block inode.
Pass 1: Checking inodes, blocks, and sizes

Running additional passes to resolve blocks claimed by more than one inode...
Pass 1B: Rescanning for multiply-claimed blocks
Multiply-claimed block(s) in inode 110625949: 640599663
Pass 1C: Scanning directories for inodes with multiply-claimed blocks
Pass 1D: Reconciling multiply-claimed blocks
(There are 1 inodes containing multiply-claimed blocks.)

File { ================== 에러난 파일 =================== } (inode #110625949, mod time Wed Jun 26 16:35:07 2019) 
  has 1 multiply-claimed block(s), shared with 1 file(s):
    <The bad blocks inode> (inode #1, mod time Sat Jul 27 21:54:33 2019)
Clone multiply-claimed blocks<y>? yes
Error reading block 640599663 (Attempt to read block from filesystem resulted in short read).  에러 무시<y>? yes
강제로 덮어쓰기<y>? no
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
/lost+found not found.  Create<y>? no
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #0 (23517, counted=23516).
Fix<y>? yes
Free blocks count wrong for group #19549 (65535, counted=0).
Fix<y>? yes

/dev/sdc1: ***** FILE SYSTEM WAS MODIFIED *****

/dev/sdc1: ********** WARNING: Filesystem still has errors **********

/dev/sdc1: 36792/183148544 files (0.0% non-contiguous), 632810807/732566385 blocks

위에서 Clone multiply-claimed blocks? yes => 이 부분을 그냥 n 로 건너뛰는게 좋다. 어차피 에러로 복사(clone) 실패 하는 듯 함.

일단 위와 같이 조치했는데, 잘 된 것인지는 좀더 체크해봐야 겠다. ( 특히 block 의 위치가 맞게 처리된 것인지... )

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

기존에 vmware 로 세팅되어 사용중이던 windows xp 를 다른 호스트머신 으로 옮기려고 한다.

그런데, vmware player 가 설치가 안된다. (windows 10 의 문제인지?)
계속 알아볼까 하다가, 그냥 virtualbox 로 옮기기로 해본다. (요즘 PC 성능이 좋아져 vm 의 성능차이가 없을 듯 하여)

예전(몇년전)에 virtualbox 를 vmware 로 해봤을때는 잘 안되었는데, 그 반대를 해보려는것.

결론은 잘 이전 된다.

그 설명을 정리해본다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

우분투 업그레이드를 했다. (간만에)

버전은 4.4.0-143-generic

Virtualbox 가  커널이 바뀌어서 모듈을 재 컴파일 해야 한다.

# sudo /sbin/rcvboxdrv setup

Stopping VirtualBox kernel modules ...done.

Uninstalling old VirtualBox DKMS kernel modules ...done.

Trying to register the VirtualBox kernel modules using DKMSERROR: Cannot create report: [Errno 17] File exists: '/var/crash/virtualbox-5.0.0.crash'

Error! Bad return status for module build on kernel: 4.4.0-143-generic (x86_64)

Consult /var/lib/dkms/vboxhost/5.0.40/build/make.log for more information.

 ...failed!

  (Failed, trying without DKMS)

Recompiling VirtualBox kernel modules ...failed!

  (Look at /var/log/vbox-install.log to find out what went wrong)

에러가 난다.  Virtualbox 특정 버전만 그런것인가? ( 5.0.40 )


일단 커널 버전을 내렸다. 4.4.0-143 은 걸러야 겠다.


ps. 다른 서버 4.4.0-142 버전은 괜찮은 것 같다.

필요하면 설치

apt-get install linux-image-4.4.0-142-generic


[추가 - 03/21]

새버전 4.4.0-144 버전이 올라와서 해보니, 동일 이슈.


[추가-04/11]

새버전 4.4.0-146 까지도 나왔는데, 동일

virtualbox-5.2 / virtualbox-6.0 도 해봐도 에러.

https://askubuntu.com/questions/1126721/4-4-0-143-generic-upgrade-16-04-vmware-no-loger-working/1126950

=> 모듈 소스를 수정해서 조치를 해야할 듯 하다. (아직 안 해봄)  => 이건 vmware 기준 소스 수정


[추가-04/16]

virtualbox 의 vboxdrv 쪽의 소스를 수정하는 방법

virtualbox 6.0.4 를 기준으로 설명 ( 커널 버전은 4.4.0-146 으로 설명)

참조 - /usr/src/linux-headers-4.4.0-146-generic/include/linux/mm.h 의 get_user_pages 의 인수가 다른 문제

vboxdrv 의 소스를 수정해준다.

/usr/src/vboxhost-6.0.4/vboxdrv/r0drv/linux/memobj-r0drv-linux.c 에서 get_users_pages 부분을 수정해주면 된다.

1122                                 /*fWrite,*/                 /* Write to memory. */

virtualbox 버전에 따라 소스 라인 위치는 다를 수 있다.


수정 후  /sbin/vboxconfig  로 다시 모듈을 만들어 준다.

정상 동작까지는 확인 했는데, 이 방법은 위험성이 있으니, 사용하면서 이상현상이 있으면 추가로 글을 남기도록 한다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

맥에서 npm (node) 를 어떤 방법으로 설치하는게 좋은가?

보통 homebrew , nvm 을 주로 쓰는 듯 하다.

맥용 기본 패키지 매니저 같은 것은 없나? ( 우분투의 apt 같은 ..)


https://nodejs.org/ 에서 다운로드해서 설치해도 되는듯 하다.


# 일단 nvm 을 시도해본다.

1. 설치 : https://github.com/creationix/nvm

2. curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

3. 위 명령으로 설치하려고 하니 git 이 없다고 한다. xcode 설치하겠는지 물어본다. (일단 설치 진행.)

4. 다시 위 명령으로 실행. 설치OK. 터미널을 재실행해 보면 된다. (nvm --version 체크)


# node(npm) 을 설치한다.

1. nvm install node   ( nvm install stable 도 동일한 듯 하다)

2. npm install -g @vue/cli  => 최종 하려던 것 - 잘 설치된다.


# vue cli 3 버전 특징.

vue cli ui 를 지원한다. 

$ vue ui  

위 명령을 내리면 브라우저가 뜨면서 설정을 UI 로 할 수 있다. ( 기존  명령창에서 하던 것을 브라우저로 가능)
> 참조 : https://medium.com/@changjoopark/vue-cli-ui-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-9ef31fea4f40



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

일본 아마존 상품을 체크중이다.



쓸만한, 뽐뿌 가 될만한 제품을 블로그에 올릴 생각이다.




affiliate 가입을 해보는데, 계속 잘린다.

왜 그럴까? 


개인블로그라서 그런가?

좀더 체크해서, 원인을 찾아봐야 겠다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,