SATA 복사를 cat으로 사용했을 때 nand flash bad sector 처리는 어떻게 하죠 ?

atoughguy의 이미지

32G 짜리 임베디드용 SATA를 복사하는데 cat 명령을 사용합니다.

cat /dev/sdb > /dev/sdc

물론 둘다 SATA고요.

Os 는 CentOS 6.3 Final.

몇가지 필요한 패키지 설치와 db 설정.

그리고 직접 작성한 어플을 올려놓은 SATA를

새로운 SATA에 복사를 하는데 ...

종종 어플이 깨지는 경우가 있더라고요.

문뜩 생각이 든게 이 SATA는 nand flash가 붙어 있거든요.

cat 으로 복사할 때 nand flash에 있는 bad sector를 인지하고 피해가는지

아니면 bad sector 따윈 무시하고 원본과 똑같은 메모리 번지에 복사를 해버리는지

궁금하더군요.

요약하면 원본 SATA nand flash 0번지에서 10번지까지 프로그램이 들어가 있고

복사본 SATA nand flash의 3번지가 bad sector 일 때

과연 cat 명령은 복사본의 3번지를 비껴나가는지 아니면 3번지에 원본 데이터를

복사해버리는지 알고 싶네요.

구글링 해도 cat이 메모리 영역을 어떻게 건드리는지 찾아보기가 힘드네요 ;;

아시는분 도움 좀 부탁드립니다 ~

goforit의 이미지

SSD (HDD) 안에서 Controller 가 있고, 그곳에서
Bad Block mapping 을 할 것입니다. 따라서 cat 에게는 전혀 안보이죠.

Controller의 역활
Every SSD includes a controller that incorporates the electronics that bridge the NAND memory components to the host computer. The controller is an embedded processor that executes firmware-level code and is one of the most important factors of SSD performance.[37] Some of the functions performed by the controller include:

Controller의 주요 구성 부분
-Error-correcting code (ECC)
-Wear leveling
-Bad block mapping (여기요!!)
-Read scrubbing and read disturb management
-Read and write caching
-Garbage collection
-Encryption

''excerpts from http://en.wikipedia.org/wiki/Solid-state_drive''

atoughguy의 이미지

답변 감사합니다 ^^

그렇다면 bad block에 대해서는 ssd의 컨트롤러가 알아서 처리한다는 것이고

cat 명령으로 복사를 하게 되면 ssd 컨트롤러가 맵핑처리한 상태에서 복사가 된다는 거네요 ?!

그런데 10개 복사한 것 중에 3~4개 정도가 os가 깨졌는지는 모르겠고 어플이 깨진 경우가 있더라고요.

외장 ssd 마운트가 안된다거나 어플이 60%만 실행된다든지 ..

이해가 안되네요 ;;

일체유심조, 불광불급, 역지사지

마잇의 이미지

dd로 디스크 복사할 때 sync 안하고 바로 빼면 실제 기록이 안되서 그런 적이 있었습니다.

복사 끝내고 sync 꼭 해보세요.


--
마잇

atoughguy의 이미지

답변 감사합니다.

sync는 따로 안하고 umount로 sata 복사 후 제거하는데 sync가 안될까요 ?

그런데 cat 명령으로 복사를 진행하면 nand flash mapping 도 그대로 복사가 될까요 ?

예를 들면 원본 SATA가 있고 0번지에서 10번지까지 데이터가 있다고 할 때

cat /dev/sdb1 > /dev/sdc1 로 복사본 SATA에 복사를 진행하면

위에 댓글 달아주신 분 말대로면 복사본 SATA가 bad block은 알아서 피해주면서

복사를 진행한다는건데., 그럼 cat은 그냥 데이터만 보내주는 것이고 데이터가 저장되는 nand는

sata 컨트롤러가 알아서 제어해 준다는 거죠 ?!

... 제가 봐도 말이 정리가 안되네요.

본론은 cat 명령으로 복사를 진행하면 원본 nand의 메모리 주소까지 그대로 복사가 되느냐 안되느냐

만약 된다면 복사본 sata에 bad sector가 있는데도 불구하고 복사가 되는 것인가 하는 것입니다.

일체유심조, 불광불급, 역지사지

마잇의 이미지

배드 블락 처리는 디스크의 펌웨어가 처리해주는 걸 믿으셔도 될 겁니다.

설사 배드 블락 처리를 못한 상태에서 해당 셀에 읽기/쓰기를 하려고 할 때 단 1바이트라도 제대로 처리가 안된다면 펌웨어에서도 그렇고 커널에서도 그렇고 두루뭉술하게 오케이하고 넘어가도록 동작하지는 않을 겁니다. 읽거나 쓸 수 없었다면 에러가 나겠죠.

sync에 대해서 좀 심각하게 생각해 보셔야 할 겁니다.

cp는 마운트 된 장치에만 복사할 수 있고 언마운트 하면 sync가 된다고 보장할 수 있습니다.

그러데 cat /dev/sda, dd of=/dev/sda는 마운트를 안해도 됩니다. 다시 말하면 /dev/sda로 직접 읽고 쓰는 작업은 마운트와는 상관이 없습니다. 그래서 언마운트도 관련이 없다고 생각 합니다.

사실 이런 경우는 마운트 하는게 더 이상하거나 위험하지 않겠습니까? cat, dd 하는 동안 마운트 된 디렉토리에 cp 하면 어떻게 될까요? 저도 잘 모르겠습니다.

파일 한 두개가 아니고 몇 십 퍼센트나 제대로 복사가 안 된 상황이라면 아마 sync를 안해서 그럴 확률이 높을 것 같습니다.

http://askubuntu.com/a/318206/14367


--
마잇

atoughguy의 이미지

usb to sata 장비를 이용해서 SATA 2개를 연결하다 보니

사실 mount는 자동으로 되고 복사 작업 후 unmount 작업을 진행합니다.

마치 윈도우에서 안전하게 저장매체 제거하는 것과 동일하게 말이죠.

그래서 unmount 하게 되면 굳이 sync를 안해도 되지 않을까 하는 의견입니다.

일체유심조, 불광불급, 역지사지

마잇의 이미지

USB 메모리에 iso 이미지 기록할 때 dd를 가끔 쓰는데 말씀하신 것처럼 USB 꼽으면 파일 관리자에서 마운트를 자동으로 합니다.

근데 저는 항상 안전하게 제거를 선택해서 언마운트 한 후 dd를 합니다. 왜냐하면 디스크 안에 파일 시스템에 접근을 하는 것이 아니고 블락 디바이스 통채로 접근하는 작업이기 때문에 오히려 마운트를 해서 다른 프로세스가 동시에 읽기/쓰기 작업을 하면 원치 않는 결과가 생길 수 있기 때문이죠.

다시 말씀드리면 mount, umount와 /dev/sda로 직접 접근 하는 것과는 전혀 상관이 없다는 겁니다. sda에 들어 있는 파티션, 파일 시스템 단위(sda1, sda2 ...)로 접근하기 위해 mount를 하는 것이고 이때는 umount를 하면 안전하게 sync까지 해주지만 /dev/sda로 직접 접근 할때는 mount할 필요도 없고 umount도 아무런 영향이 없다는 게 제 의견 입니다.


--
마잇

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.