[완료] Loopback device에서 파일 수 제한이 있습니다. ㅠㅠ

sonc81의 이미지

안녕하세요 ^^;

제가 이미지파일을 loopback 파일시스템으로 만들었습니다.

플래쉬에 저장되는 이 파일은 RAM에 loopback파일시스템으로 마운트가 됩니다.

그런데,

이 파일시스템에서 파일을 추가할 때, 일정 개수를 초과하면 더이상 파일이 생성되지 않습니다.(여유공간은 충분)

그래서,

이미지파일을 만들때, "dd"명령을 이용해 count수를 늘려주면 어느정도 파일이 더 생성되고 또 다시 생성되지 않는 문제가 있습니다.

혹시, loopback mount시 파일 수 제한이 있나요??

##################### [완료] #####################

mke2fs사용 시,
-i옵션을 안 줄 경우 기본적으로 inode당 byte수가 4096으로 설정이 됩니다.
loopback 파일시스템의 block size는 1024이기 때문에
-i옵션에 '1024'값으로 설정해 Test할 경우 "dd"에서 설정했던 count수 보다 10개 적은 개수까지 파일이 생성되었습니다.

관심가져주신 분들께 감사드립니다. ^^

superwisdom의 이미지

제가 제대로 이해했는지 모르겠네요.

예를 들어 설명하자면
1. /dev/sda3 파티션을 dd 명령어를 이용하여, 이미지 파일로 만듬.
또는 mkfs에 loopback 옵션을 줘서, 이미지 파일을 만듬.
2. 이미지 파일을 플래시 메모리에 저장
3. 플래시 메모리에서 RAM으로 loopback mount

이런 상황인가요?

만약 그렇다면
a. 파일 수에 대한 limit는 /dev/sda3가 어떤 파일 시스템이냐에 영향을 받습니다.
b. dd와는 상관 없습니다. 단, dd의 if 에 해당하는 /dev/sda3의 크기와 of에 해당하는
이미지 파일의 크기를 비교하셔서 같음을 확인하셔야 합니다.
("dd 명령을 이용해 count수를 늘려주면 어느정도 파일이 더 생성되고 또 다시
생성되지 않는 문제"가 있다고 하셨는데, 무슨 말씀인지 이해를 못했습니다.)

sonc81의 이미지

먼저, 답변 감사드립니다. ^^
제 질문에 좀 모호한면이 있었네요.. 죄송합니다.. 다시 설명드리겠습니다.

=========================================================================
1. dd를 사용해 if, of, bs, count를 설정합니다.

2. mke2fs를 사용해 파일시스템을 생성합니다.

3. 2번에서 생성한 파일시스템을 임의의 디렉토리에 ext2로 loopback mount합니다.

4. loopback mount된 디렉토리에 파일들을 복사합니다.

5. 임의의 디렉토리는 umount시키고, 2번에서 생성했던 파일시스템은 tar.gz으로 압축합니다.

6. mkfs.jffs2를 사용해 tar.gz으로 압축된 파일을 jffs2 파일시스템으로 만듭니다.
=========================================================================

위와 같은 방법으로 만들어진 이미지 파일은 보드의 flash에 저장됩니다.

"dd" 명령에서 count수를 정할 땐, 복사할 전체 파일 사이즈보다 조금 여유있게 잡습니다.
마운트후에 추가로 생성되는 파일들이 있기 때문입니다.

그런데, 마운트 후 파일을 생성하다보면 어느 순간부터 공간이 없다는 메시지와 함께 파일 생성이 안됩니다.

보드에서 "df"명령으로 확인해보면 남아있는 용량은 충분합니다.

그래서, "dd"명령에서 count수를 처음보다 높게 잡으면 파일 생성이 처음때 보다는 조금 더 생성할 수 있지만 어느 순간 다시 같은 에러가 나는 증상입니다.

superwisdom의 이미지

간단히 다음과 같이 테스트 해보았습니다.
1. dd if=/dev/zero of=wisdom.img bs=1k count=1024
-> 1메가짜리 더미 파일 생성
2. mkfs.ext2 -F wisdom.img
-> ext2로 파일 시스템생성
3. mount -o loop wisdom.img /mnt/wisdom
-> loopback으로 마운트
4. df | grep wisdom.img
-> 얼마나 여유 공간이 있나 확인. 그랬더니 실제로 935 KByte를 사용할 수 있음.
/root/wisdom.img 1003 17 935 2% /mnt
5. 마운트 된곳에 934 kbyte 짜리 파일 복사
-> 이상 없이 복사 완료... 단 여유 공간이 거의 없음.
6. 이곳에 추가로 자잘한 파일을 복사
-> file system full 에러 발생

현재 이런 상황이신 것 같습니다.

"dd 명령에서 count수를 정할 땐, 복사할 전체 파일 사이즈보다 조금 여유있게 잡습니다."
라고 하셨는데, 이 부분에서 조금 여유있게 잡았다는 것이 어느정도 되시는지요?

mkfs 과정에서 만들어지는 파일시스템 테이블... 생각보다 큽니다. 조금 더 충분히 잡으세요.
극단적으로 wisdom.img 파일이 1024 KByte이고, 이곳에 1 KByte만 복사하셨더라도, tar.gz으로
압축하는 과정에서 엄청~~~~~~~~~~~~~나게 압축됩니다. 사용되지 않은 나머지는 /dev/zero로부터
0으로 set 되어 있는 바람에 압축 효율이 상상을 초월하거든요.
(물론 unmount할 때의 RAM 용량을 고려하면, 터무니없이 크게 잡을 수는 없겠지만요...)

아무튼 결론적으로 파일시스템의 파일 개수 제한 문제가 아니라, 말 그대로 공간이 충분치
않은 것 같습니다.

superwisdom의 이미지

아, 근데 제 말이 틀리군요.
실제로 아래와 같은 스크립트를 이용하여 파일을 생성해 보았는데요,
for (( i=0; i<1000000; i++ )); do echo "a" > test_$i.img; done
이미지 파일이 1 MByte일 경우, 실제로 116개밖에 생성이 안되네요...

이번에는 이미지 파일의 크기를 1 GByte로 늘려보았습니다.
1만개까지 생성에 문제 없습니다.

일단 이미지 파일의 크기를 늘려서 시도해 보시면 될 듯 합니다.
원인은.. 저도 잘....

sonc81의 이미지

빠른 답변 정말 감사드립니다.. ^^;

1. 여유 공간
여유공간은 약 600K정도입니다. 보드에서 RAM에 loopback으로 마운트 된 후
약 100K정도의 파일이 추가적으로 생성되게 됩니다.
(아래는 보드에서 "df"실행 결과입니다.)
Filesystem 1K-blocks Used Available Use
%/dev/loop0 2552 1833 588 76%

2. 압축 파일
압축을 한 이유는 Flash공간을 절약하기 위해서 입니다.
실제 파일들은 압축이 풀려 loopback마운트로 RAM에 상주하게 됩니다.

3. 파일 추가 문제
보드에 loopback 마운트 된 상태에서 "df"명령 실행시
약 500K정도의 여유공간이 있습니다.
그런데 이 상태에서 파일을 추가하려고하면
"No space left on device"라는 에러가 생깁니다.

공간은 충분한 상태입니다. "dd"명령에서 bs=1k count=2600을 했을경우 약290개정도의 파일이 생성되면 더이상 파일을 생성할 수 없는 상태입니다.

적극적인 답변에 다시 한번 감사드립니다. ^^

vacancy의 이미지


mke2fs manpage 보시면
inode 수와 관련된 옵션이 꽤 여럿 있는데요.
이것과 상관이 있지 않을까 생각을 합니다.
superblock 사이즈가 넘치면 meta정보를 저장할 곳이 없으니요.

sonc81의 이미지

답변감사드립니다.

vacancy님 말씀대로 mke2fs 옵션을 이용해 해결했습니다.

댓글 달기

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