임베디드 리눅스 FAT32 대용량 파일 수정

gazam의 이미지

지난번에 질문을 올렸는데 너무 뭉뚱그려서 질문한거 같아서
좀 자세히 올려봅니다.

일단 하려는 것은 FAT32로 포맷된 하드에 있는 파일을 수정하려는 것입니다.
파일이 aaaaaabbbbbbccccc 이런식으로 있습니다.
여기에서 b부분을 잘라내고 싶습니다.
문제는 파일의 용량이 4기가까지 될 수 있다는 것입니다.

부분 복사로는 시간상 문제가 생길 수 있을것으로 예상됩니다.

제 생각으로는 하드에 접근해서 마지막 a와 처음c 부분의 클러스터 링크 정보를
수정해주는 방법을 생각하고 있습니다만 이것을 하려면 아무래도 디바이스 드라이버를
건드리지 않고 api만으로 되는 것인지가 궁금하네요.

다른 한 가지 방법을 생각해본게 같은 파티션 내에서는 파일의 move는 시간이 오래 걸리지
않는다는 점을 이용해서 a부부분과 c부분을 이동시켜버리는 방법도 생각해 보았습니다만
이게 어떻게 구현이 되어야 할지 잘 감이 안오네요.

어떤 식으로 접근해야 할 지 어떤 api들을 사용해야 할 지....
제게 도움을 주시면 감사하겠습니다.!!

Necromancer의 이미지

로레벨로 접근하신다면 그냥 클러스터 따라가면서 그 클러스터 영역의 데이터만 읽고 덮어쓰면 될텐데요.
그리고 API 함수 지원된다면 fseek(), fread(), fwrite()정도만 해도 됩니다. 기존 파일크기를 넘어서는 범위에서 fwrite()하는 경우에 파일 크기가 늘어나죠.

FAT 자체는 단일파일 4G 이상 허용 안합니다.
왜그러냐면 파일 정보를 기록한 엔트리 쪽에 보면 파일 크기를 바이트 단위로 기록하는 란이 있는데. 이 란의 크기가 32비트입니다.
오버한다면... 어떻게 될지는 장담 못하죠. 잘된 라이브러리라면 못쓴다고 에러코드 리턴할꺼고, 그렇지 않다면 파일시스템 말아먹을 수도 있습니다.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

gazam의 이미지

네 4기가 이상 쓰지 못하는 것은 알고 있습니다.
제가 4기가를 언급한 것은 파일 사이즈가 그만큼 클 수 있어서 언급한 것이고요.
fseek(), fread() 등의 api가 지원된다고 하더라고 이것들을 이용해서
클러스터 단위로 접근이 가능한 것인가요? 리눅스를 잘 알지 못해서요.
fseek 가지고는 파일의 데이터에만 접근할 수 있는것으로 알고 있어서요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.