Armadilloフォーラム

SDカードをfsck.vfatでmalloc:Cannot allocate memory

k.sato

2017年6月1日 10時31分

佐藤と申します。
お世話になっております。

Armadillo-420で開発しております。
SDカードをマウントする前にfsck.vfatをしたところ
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
malloc:Cannot allocate memory
となってしまいました。

SDカードが8GBだと発生し、4GBでは正常に完了します。
また同じものをArmadillo-460で動作させたところどちらのSDカードでも発生しません。

これは420のRAM領域が少ないためなのでしょうか?

現状が正確に把握できていないかもしれませんが
ご教示のほど宜しくお願いいたします。

コメント

at_kojiro.yamada

2017年6月1日 19時28分

> 佐藤と申します。
> お世話になっております。
>
> Armadillo-420で開発しております。
> SDカードをマウントする前にfsck.vfatをしたところ
> dosfsck 2.11, 12 Mar 2005, FAT32, LFN
> malloc:Cannot allocate memory
> となってしまいました。
>
> SDカードが8GBだと発生し、4GBでは正常に完了します。
> また同じものをArmadillo-460で動作させたところどちらのSDカードでも発生しません。
>
> これは420のRAM領域が少ないためなのでしょうか?
>
>
> 現状が正確に把握できていないかもしれませんが
> ご教示のほど宜しくお願いいたします。

Armadillo-420とArmadillo-460で、
SDカードをマウントする前後にfreeコマンドを実行してマウントすることでどの程度メモリが消費されるのかを確認し、
結果を比較してはいかがでしょうか?

返信ありがとうございます。

> Armadillo-420とArmadillo-460で、
> SDカードをマウントする前後にfreeコマンドを実行してマウントすることでどの程度メモリが消費されるのかを確認し、
> 結果を比較してはいかがでしょうか?

8GBのSDカードで比較しました。
この結果から何かわかりますでしょうか?

●Armadillo420
[root@(ttymxc1) ~]# free
total used free shared buffers
Mem: 61440 34940 26500 0 296
Swap: 0 0 0
Total: 61440 34940 26500

[root@ (ttymxc1) ~]# fsck.vfat -a /dev/mmcblk0p1
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
malloc:Cannot allocate memory

[root@(ttymxc1) ~]# free
total used free shared buffers
Mem: 61440 33668 27772 0 176
Swap: 0 0 0
Total: 61440 33668 27772

[root@(ttymxc1) ~]# mount -t vfat /dev/mmcblk0p1 /home/ftp/pub/
[root@(ttymxc1) ~]# free
total used free shared buffers
Mem: 61440 42320 19120 0 7792
Swap: 0 0 0
Total: 61440 42320 19120

●Armadillo460
[root@ (ttymxc1) ~]# free
total used free shared buffers
Mem: 126720 38404 88316 0 332
Swap: 0 0 0
Total: 126720 38404 88316

[root@ (ttymxc1) ~]# fsck.vfat -a /dev/mmcblk0p1
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
/dev/mmcblk0p1: 139 files, 12460/1940480 clusters

[root@ (ttymxc1) ~]# free
total used free shared buffers
Mem: 126720 38376 88344 0 332
Swap: 0 0 0
Total: 126720 38376 88344

[root@ (ttymxc1) ~]# mount -t vfat /dev/mmcblk0p1 /home/ftp/pub/
[root@ (ttymxc1) ~]# free
total used free shared buffers
Mem: 126720 46860 79860 0 7944
Swap: 0 0 0
Total: 126720 46860 79860

at_kojiro.yamada

2017年6月2日 11時08分

申し訳ありません。マウントではなくてfsckでしたね。
先にお伝えした方法だとfsck.vfatがどれくらいメモリを必要としていたのかわからないので別の方法を考えます。

Armadillo-420にUSBメモリを接続してUSBメモリ上にswap領域を作成するのはいかがでしょうか?
swap領域を作成して動作するようになるなら、メモリが足りなくて動作できなかったのだと考えられます。

swap領域の作成手順は以下が参考になります。
https://users.atmark-techno.com/comment/1364#comment-1364

> Armadillo-420にUSBメモリを接続してUSBメモリ上にswap領域を作成するのはいかがでしょうか?
> swap領域を作成して動作するようになるなら、メモリが足りなくて動作できなかったのだと考えられます。

USBメモリ上にswap領域を作成してfsckを行ってみました。
fsck.vfatでmalloc:Cannot allocate memoryと変わりません。
swap領域は動作していそうなのですが。

[root@(ttymxc1) /mnt]# free
total used free shared buffers
Mem: 61440 33436 28004 0 136
Swap: 0 0 0
Total: 61440 33436 28004

[root@(ttymxc1) /mnt]# mount
/dev/ram0 on / type ext2 (rw)
proc on /proc type proc (rw)
usbfs on /proc/bus/usb type usbfs (rw)
sysfs on /sys type sysfs (rw)
udev on /dev type tmpfs (rw)
/dev/sda1 on /mnt type ext3 (rw,errors=continue,data=ordered)

[root@(ttymxc1) /mnt]# dd if=/dev/zero of=swap bs=1024 count=256
256+0 records in
256+0 records out

[root@(ttymxc1) /mnt]# mkswap swap
Setting up swapspace version 1, size = 258048 bytes

[root@(ttymxc1) /mnt]# swapon swap
Adding 248k swap on swap. Priority:-2 extents:2 across:252k

[root@ (ttymxc1) /mnt]# free
total used free shared buffers
Mem: 61440 33856 27584 0 196
Swap: 248 0 248
Total: 61688 33856 27832

[root@(ttymxc1) /mnt]# fsck.vfat -a /dev/mmcblk0p1
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
malloc:Cannot allocate memory

[root@(ttymxc1) /mnt]# free
total used free shared buffers
Mem: 61440 33076 28364 0 64
Swap: 248 4 244
Total: 61688 33080 28608

at_kojiro.yamada

2017年6月2日 13時59分

>
> > Armadillo-420にUSBメモリを接続してUSBメモリ上にswap領域を作成するのはいかがでしょうか?
> > swap領域を作成して動作するようになるなら、メモリが足りなくて動作できなかったのだと考えられます。
>
> USBメモリ上にswap領域を作成してfsckを行ってみました。
> fsck.vfatでmalloc:Cannot allocate memoryと変わりません。
> swap領域は動作していそうなのですが。

最初に確認していただきましたが、
Armadillo-460ではfsck.vfat実行前のメモリの空き容量が 90 [MB] ほどありましたので、
作成したswapのサイズ(1024 * 256 = 256 [KB])では
容量が足りない可能性があります。

swapのサイズを100[MB]にしても同じ結果になるでしょうか?

> 最初に確認していただきましたが、
> Armadillo-460ではfsck.vfat実行前のメモリの空き容量が 90 [MB] ほどありましたので、
> 作成したswapのサイズ(1024 * 256 = 256 [KB])では
> 容量が足りない可能性があります。
>
> swapのサイズを100[MB]にしても同じ結果になるでしょうか?

すみません、dd if=/dev/zero of=swapの確認で小さいサイズのままでした。
swapのサイズを100[MB]に変更したところfsckが正常に完了しました。

[root@(ttymxc1) /mnt]# free
              total         used         free       shared      buffers
  Mem:        61440        59696         1744            0          288
 Swap:       124992            0       124992
Total:       186432        59696       126736
 
[root@(ttymxc1) /mnt]# fsck.vfat -a /dev/mmcblk0p1
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
/dev/mmcblk0p1: 165 files, 13529/1940480 clusters
 
[root@(ttymxc1) /mnt]# free
              total         used         free       shared      buffers
  Mem:        61440        33012        28428            0          156
 Swap:       124992         2104       122888
Total:       186432        35116       151316

RAM diskに余裕があるので、RAM diskのサイズを下げるのがよいのでしょうか?
良い方法があればお願い致します。

[root@(ttymxc1) /mnt]# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/ram0                25327     13505     10542  56% /
udev                     30720         4     30716   0% /dev
/dev/sda1               991752    141556    799816  15% /mnt
 

佐藤です。
お世話になっております。

[root@(ttymxc1) ~]# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/ram0                15235     12980      1480  90% /
udev                     30720         4     30716   0% /dev
/dev/mmcblk0p1         7761920    438944   7322976   6% /home/ftp/pub
 

RAM diskの容量を下げて電源の入り切りを繰り返してみました。
大体は正常にfsck.vfatが通り下記のようになるのですが

login: dosfsck 2.11, 12 Mar 2005, FAT32, LFN
/dev/mmcblk0p1: 2238 files, 405940/1964800 clusters
 

たまに下記のようなメッセージが発生しプロセスが落ちてしまいます。
何か対策の方法はありますでしょうか?

login: udevd invoked oom-killer: gfp_mask=0x1200d2, order=0, oomkilladj=-17
[<c02a40c0>] (dump_stack+0x0/0x14) from [<c0075514>] (oom_kill_process+0x7c/0x1cc)
[<c0075498>] (oom_kill_process+0x0/0x1cc) from [<c0075cb8>] (out_of_memory+0x188/0x250)
[<c0075b30>] (out_of_memory+0x0/0x250) from [<c0078e84>] (__alloc_pages_internal+0x3f0/0x428)
[<c0078a94>] (__alloc_pages_internal+0x0/0x428) from [<c0078ee4>] (__alloc_pages+0x14/0x18)
[<c0078ed0>] (__alloc_pages+0x0/0x18) from [<c00823ec>] (do_wp_page+0xd4/0x698)
[<c0082318>] (do_wp_page+0x0/0x698) from [<c00830a0>] (handle_mm_fault+0x210/0x750)
[<c0082e90>] (handle_mm_fault+0x0/0x750) from [<c002dcc4>] (do_page_fault+0x1b4/0x25c)
[<c002db10>] (do_page_fault+0x0/0x25c) from [<c0028260>] (do_DataAbort+0x3c/0xa0)
[<c0028224>] (do_DataAbort+0x0/0xa0) from [<c0028b00>] (ret_from_exception+0x0/0x10)
Exception stack(0xc3529fb0 to 0xc3529ff8)
9fa0:                                     0008b400 0002178c 0002178f 00000000
9fc0: 00000008 401494c8 be845618 00000000 00021378 00021a0c 0002178c be845614
9fe0: 00000000 be844cf8 400bdbd0 400bdbe0 00000010 ffffffff
Mem-info:
DMA per-cpu:
CPU    0: hi:    0, btch:   1 usd:   0
Normal per-cpu:
CPU    0: hi:   18, btch:   3 usd:   7
Active:10103 inactive:59 dirty:0 writeback:0 unstable:0
 free:303 slab:771 mapped:0 pagetables:82 bounce:0
DMA free:392kB min:188kB low:232kB high:280kB active:7496kB inactive:0kB present:12192kB pages_scanned:16580 all_unreclaimable? yes
lowmem_reserve[]: 0 51 51
Normal free:820kB min:824kB low:1028kB high:1236kB active:32916kB inactive:236kB present:52832kB pages_scanned:103825 all_unreclaimable? yes
lowmem_reserve[]: 0 0 0
DMA: 0*4kB 1*8kB 0*16kB 0*32kB 2*64kB 0*128kB 1*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 392kB
Normal: 15*4kB 3*8kB 0*16kB 1*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 820kB
59 total pagecache pages
Swap cache: add 0, delete 0, find 0/0
Free swap  = 0kB
Total swap = 0kB
16384 pages of RAM
396 free pages
1052 reserved pages
771 slab pages
83 pages shared
0 pages swap cached
Out of memory: kill process 415 (busybox) score 67 or a child
Killed process 415 (busybox)
 

佐藤です。
お世話になっております。

menuconfigのUserland Configurationからチェックを外し
更にRAM領域を広げることにより
Killed processのエラーは出なくなりました。

ありがとうございました。