エラーメッセージについて

エラーメッセージについて

- Chisako Salazar の投稿
返信数: 24

Moodle1.9にヴァージョンアップしてから以下のエラーメッセージが頻繁に出てしまいます。

> From: 大学院事務局
> Sent: Saturday, January 24, 2009 4:27 AM
> Subject: [エラー] スケジュールバックアップ状況
> Importance: High
>
>
> 要約
> ==================================================
>   コース: 76
>   OK: 68
>   スキップ: 4
>   エラー: 0
>   未了: 3
>
>   いくつかのコースが保存されませんでした!!
>
>   次のバックアップログをご覧ください:

実際に表面上特に問題となることはないんですが、気になります。

これは何が原因なのでしょうか? また、これを解決するにはどうしたら良いのでしょうか?

お教え頂けたら助かります。

宜しくお願いいたします。

Chisako Salazar への返信

Re: エラーメッセージについて

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
> これは何が原因なのでしょうか? また、これを解決するにはどうしたら良いのでしょうか?

バックアップが正常に終了していないだけで、ご指摘どおり、実際の使用には問題はございません。

大変お手数ですが、下記ドキュメントの「8 What does "Some of your courses weren't saved!!" mean?」の部分をご覧ください。
http://docs.moodle.org/en/Backup_and_restore_FAQ

「未了」の3コースですが、恐らくコース内のコンテンツが大きいため、タイムアウトしたものだと思われます。
ご参考までに、下記投稿をご覧ください。笑顔

[backup unfinished for one course]
http://moodle.org/mod/forum/discuss.php?d=50806
Mitsuhiro Yoshida への返信

Re: エラーメッセージについて

- Chisako Salazar の投稿

Mitsuhiro Yoshida様

早速、ご説明いただき、有難うございます。頂いたウェブサイトも参考になりました。

確かに容量が大きいかもしれません。

とりあえずは、実際の使用にはやはり問題なしということで、安心致しました。

Chisako Salazar への返信

Re: エラーメッセージについて

- Tatsuya Shirai の投稿

タイムリーですねウインク
http://moodle.org/mod/forum/discuss.php?d=114780

これは需要がある,ということでしょうか.

 Salazarさんの環境はどのような環境でしょうか.大雑把で結構です.

・OS: Linux, WindowsServer, WindowsXP(Vista), Mac OS, etc...
・ハードウェア: いわゆるサーバ,いわゆるパーソナルコンピュータ

 もし,サーバ上のLinuxであっても定期バックアップ(ZIP書庫化)にタイムアウトしてしまう事例が多々あるのでしたら需要があるのかなと考えています.

 対策としてはタイムアウト時間を延ばすか,あるいは巨大なファイルのバックアップは行わない,という二つの選択肢があります.私の環境ではHDDにある程度の余裕はあるものの,20GB×5週分=100GBも浪費するのはどうかなぁと考えています.バックアップ作業中はサーバの反応も悪くなりそうですし.


 当方の環境(PC: Pentium4, WindowsXP)では,max_execution_timeを240秒に設定してあります.20GBものコースファイルをバックアップするのには足りませんね.もっと延ばした方が良さそうです.HDDの空きはあと200GBほどありますので.

Tatsuya Shirai への返信

Re: エラーメッセージについて

- Yuichi Saotome の投稿
五月女@信州大学です.

本学でも,最近動画ファイルの設置によるコースのバックアップファイルの巨大化現象が発生しており,20GBを越えるコースも発生しています.

当初moodleでzip圧縮を用いる際に,標準的に利用するpclzipを使ったバックアップお行ったていたのですが,4GBを越えたあたりからバックアップ中にエラーで中止してしまう現象が発生しはじめました.
そこで,サーバ内部のzipコマンドを用いて圧縮処理を行う様にした所,現在は問題なくバックアップが行えています.
サイト管理->サーバ->システムパス->zipのパスから設定を行いました.

以下の様なサーバ構成で20GBを越えるコースのバックアップが可能です.

webサーバのスペックはこの様な感じです.
CPU : Intel Xeon E5320 Quad Core (1.86GHz)
Memory : DDR400 ECC 2GB*4 (8GB)
HDD : S-ATA 250GB*4 RAID5
OS : FreeBSD 7.0-RELEASE amd64 (VMwareESXi上)

ただ,蛇足になりますが,バックアップは可能ですが時間はかかりますので,動画ファイルについては,なるべく別サーバに設置してリンクを張る形で対応を行っています.
最近は,YouTube Clone なスクリプトもありますので,そういったシステムとmoodleが連携出来ると凄い便利だと考えており,構想もしているのですが,なかなか手が出ません.
Yuichi Saotome への返信

Re: エラーメッセージについて

- Tatsuya Shirai の投稿

 なるほど!

 max_execution_timeotはスクリプトの実行に対するタイムアウトですから,外部コマンドにしてしまえばタイムアウトに悩む必要は無いのですね.

Chisako Salazar への返信

Re: エラーメッセージについて

- Chisako Salazar の投稿

Shirai様、Saotome様

詳しく有難うございます。

私の方の環境はWindowsXP、パーソナルコンピューター、HDDは250GBです。

ISの知識不足でこの位しか解らないのですが…、要するにバックアップは使用しているコンピューターの性能と容量にかかっているということでしょうか?

サーバを経由していないコンピューターを使用している場合の解決方法は、容量の大きいコースを小さくするか、PCの性能、容量を良くするしかないということになりますか?

容量の大きいコース数は連絡があるのですが、どのコースが引っかかっているかということはどの様にして確認出来るのでしょうか?

皆さんの内容についていけず、申し訳ないのですが、アドバイス頂けると助かります。

Chisako Salazar への返信

Re: エラーメッセージについて

- Tatsuya Shirai の投稿

 基本的にSalazarさんの理解で正しいです.

 対処法として,とりあえず容量の大きすぎるコースには容量を減らせないかお願いする,という方針であるとして,どのコースがバックアップされなかったのかを調べましょう.

[サイト管理]-[レポート]-[バックアップ]をご覧下さい.

 最新実行ログの一覧表が表示されます.状態の欄がエラーになっているコースのバックアップに失敗しています.もし全てOKかスキップであるならば,エラーは別の要因かも知れません.

Tatsuya Shirai への返信

Re: エラーメッセージについて

- Chisako Salazar の投稿

解りやすく説明して頂き、どうも有難うございます。

バックアップ未了も確認できましたし、何とか解決に向けたいと思います。

Chisako Salazar への返信

Re: エラーメッセージについて

- Tatsuya Shirai の投稿

 当方のサイトも実は同じ問題を抱えたままですので,この問題に関して以下のディスカッショントピックスを作成しました.(Windowsサーバ上で外部zipコマンドを使う)

http://moodle.org/mod/forum/discuss.php?d=115320

Tatsuya Shirai への返信

Re: エラーメッセージについて

- Tatsuya Shirai の投稿

 トータルで2GBを越えるようなコースファイルを含むコースのバックアップに関しては,現状,PHPの制限により正しくバックアップが取れない可能性が高いことが分かってきました.

 バックアップをZIPファイルに圧縮する点に関しては外部ZIPプログラムを利用することで問題を回避できますが,バックアップしたzipファイルをコースに書き戻す処理(copy())で問題が生じます.この書き戻す処理はcopy()関数の代わりにrename()関数を用いることで回避できます.以下にMoodle1.9でのソースコードの変更点を示します(完全に確認をとった訳ではありません).

backup/backuplib.php, function copy_zip_to_course_dir()

        //Copy zip file
        if ($status) {
// (TEST): 以下コメントアウト
//
          $status = backup_copy_file ($from_zip_file,$to_zip_file);
// (TEST): ここから追加
            umask(0000);
            if (rename($from_zip_file,$to_zip_file)) {
                chmod($to_zip_file,$CFG->directorypermissions);
                $status = true;
            } else {
                $status = false;
            }
// (TEST): ここまで追加
        }

        return $status;
    }

 これで2GBを越えるバックアップファイルを作成できると思われますが,まだそれだけで問題は終わりません.Moodleのファイルエディタでこの作成されたバックアップファイルのサイズを表示すると,実体よりも小さな値(正直な話,ムチャクチャな値)が表示されます.多分,ブラウザ経由でのダウンロードにも失敗するでしょう.”リスト”でzip書庫の中身をリスト表示するのもうまくいかない可能性があります.”展開”や”リストア”も失敗すると思います.

 ただし,”展開”や”リストア”はunzipプログラムのパスを指定して外部zipプログラムを利用すれば機能する可能性があります.未確認です.

#もし2GBを越えるファイルをPHPが正しくコピーできないのであるとすると,ブラウザ経由でアップロードしたり,ダウンロードしたりする作業も一見正しく行えていて,実はファイルを壊している可能性がありますね.できるだけ早く調査したいと思います.Linux利用者の方も,チェック頂けると助かります.

Tatsuya Shirai への返信

Re: エラーメッセージについて

- Umeda Junichi の投稿

いろいろ調べて見ましたが、方向性は2つの様です。

●Moodle上で4GB以上のファイルを扱わない様にする
 方法:外部ソフト等を利用してファイルを4GB以下に分割/バックアップフォルダとしての管理を行う
         (Moodleでのフォルダサイズは4GB以上も表示される為、INT型の制限はないと思われる)
<問題点>
 ※IEには4GB以上のファイルをダウンロードできない問題があり、たとえサーバ側が4GB以上表示できても問題が発生します。(この問題はIE7でも継続中の模様・・・)
   http://support.microsoft.com/kb/298618/ja
 ※4GB以下のファイルに分割するロジックをつくるとしても、結局PHPが4GB以上のファイルを
   処理できない以上外部ソフトに頼らざる得ない。
 ※バックアップ/4GB以下に分割/4GB以上に結合/リストアが出来るプログラムを開発する必要がある。(場合によっては新しいVersion毎に調整が必要)

●サーバを64bit化し利用環境を制限する
 方法:
   ・サーバー/Apache/PHP/MySQLを64bit化する。
  ・利用環境であるブラウザもIE以外(4GBを超えるダウンロードが可能なもの)に制限する。
  64bit版 Apache/PHP/MySQL環境構築方法
   http://www.elxis.org/guides/developers-guides/64bit-apache-php-mysql-windows.html
 
  利点
  環境が整ってしまえば問題が発生する事も少なく今後のリリースにも対応が可能です。

  欠点
  ※環境を整えるのに大幅な変更(OS再導入やサーバマシンの交換等)を加える必要があります。
  ※利用環境を制限する必要があります。

その他・・・
  記載のあった、PHPの再コンパイルも試みて見ましたが・・・組み込み型のPHPに合せて渡すパラメータ等がうまくいっていないのか、そもそもパラメータの渡し方もあっているのか不明でPHPだけを置き換えることが出来ませんでした。(このあたりは私の知識不足で申し訳ない限りです。)
 cygwinを使えば、現状Linuxと同様でビルドできるのでしょうが試せていません。

Umeda Junichi への返信

Re: エラーメッセージについて

- Tatsuya Shirai の投稿

 通常のWebブラウザを介したファイルのアップロードやダウンロードでGBオーダーのファイルを取り扱うのは20分先の未来の話としておきましょうか^^.きっとそれが当たり前になる時代も来るのでしょうね.

 とりあえずバックアップが作成されさえすれば,あとは手動で復旧もできなくはない,と,現状では割り切っています(ですので,19GBのバックアップファイルのリストアは試していません).この手の巨大なファイルはサーバとの間でFTP等を使ってやり取りすることになるでしょう.そう考えると,Moodle2.0の新しいファイル管理手法は悩ましい問題になりそうです.

 選択肢の一つとして考えていたのはzipファイルの分割です.指定のファイルサイズで自動的に分割式のzipファイルを作成してくれるオプションが無いかと探したのですが...ただ,19GBのZIPファイルが2GBで切られてしまったものをダウンロードした際に,手元のアーカイバは「分割された続きのzipファイルは?」と聞いてきました.強制的に(外部プログラムか何かで)分割し,それを扱えるように改良すればもしかしたらなんとかなるかも知れません.

 LHA(WindowsコマンドラインおよびLinux)がコマンドラインオプションで圧縮ファイルを分割可能ならば,外部zipプログラムとしてLHAを使えるようにする改造も候補の一つですね.いま気付いたのですが,私のPCにコマンドライン版のLHAはインストールしてありませんでした^^;

 単体のファイルサイズが2GBを越えなければMoodle上でフォルダサイズの表示は問題ありません.PHPは変数の値がintの範囲を超えると自動的にfloatに型変換してくれるお陰です.

Tatsuya Shirai への返信

Re: エラーメッセージについて

- Tatsuya Shirai の投稿

PHP5.2.7のchange logに,

Fixed read or write errors for large zip archives. (Pierre)

とありますね.

http://www.php.net/ChangeLog-5.php

 Moodle2.0では大きなzipファイルも扱えるとUsing moodleに書かれていました.Moodle2.0ではこの大きなzipファイルの読み書きに対応した機能も使う選択肢を増やしたのかも知れません(外部zipプログラムではなく).

 copy()やfilesize()も正しく動作するのかな?(そうでないと片手落ちですから対応しているのかも)

 もしそうならば,現状でもPHPのバージョンを上げ,外部zipプログラムを使えば2GBを越えるバックアップファイルの作成には正しく対応できるのかも知れませんね.

Tatsuya Shirai への返信

Re: エラーメッセージについて

- Minoru Akiyama の投稿
秋山です。

moodle2.0では、システムパスの設定からzip、unzipが消えました。
多分、先生の想像どおりではないでしょうか?
2Gbでテストしてみましょうか?
ーーー>と思ったのですが、私のノートPC(Ubuntu)は、PHP5.2.4なのでmoodle2.0のバージョンチェックの部分を書き換えてごまかしているので、実際は意味がないことだと気がつきました。
Tatsuya Shirai への返信

moodle2.0のzip

- Takayuki Fukuyama の投稿
福山です

moodle2.0はpclzipを叩くというのをやめて完全に内部関数を使うようになったようです。lib/packer/zip_archive.phpというのがやっているようで、ZipArchiveをnewしています。

http://jp2.php.net/manual/ja/zip.examples.php

この辺にexampleスクリプトがあるので、これで大容量のzipのアーカイブやリスティングを行う事が出来ればmoodleでも出来ると思います(が、試せていません。すみません)
Takayuki Fukuyama への返信

Re: moodle2.0のzip

- Tatsuya Shirai の投稿

ありがとうございます!

 phpサイトのドキュメントにZip関係のコマンドがあったので,これを使うのかな?と思っていたのですが当たったようですね.pclzipの内部にも少し手を入れてしまっていたのでMoodle2.0へのアップグレードはちょっと遅れるかも知れませんね.

Tatsuya Shirai への返信

Re: moodle2.0のzip

- Takayuki Fukuyama の投稿
福山です

ちょっと試してみました(php5.2.0と5.2.8で試しました)。結論から申し上げますとやはり無理でした。2Gを越えた所でファイルがサイズがゼロになり、最終的に消滅します(pclzipの場合はゴミが残るのでしたっけ?)。moodledocをよく見るとやはり32bitでは駄目なようです

http://docs.moodle.org/ja/%E9%96%8B%E7%99%BA:%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABAPI#zip_support

Large file support: PHP running under 32bit operating systems does not support files >2GB (do not expect fix before PHP 6). This might be a potential problem for larger backups.

こうなると外部コマンドに引き渡すものを残しておいて欲しかったかなとも思います。PHP5のコードらしく、file_archiveというabstractクラスが定義されていたりもするのでうまく差し替える事も出来なくはないかもしれません。。
Takayuki Fukuyama への返信

Re: moodle2.0のzip

- Tatsuya Shirai の投稿

 いや本当に外部コマンドが無くなったのだとすると繋ぎの技術を無理やりコーディングしなくてはならないので痛いですね.パフォーマンスの点からも,外部プログラムを選択したいという要望はあると思うのですけれども.

 Using moodleのbackup and restoreのフォーラムに目を通してみましたが,悲鳴が響き渡っています.

 確かに多くはこの2GBとは別の問題なのかも知れません(単にタイムアウトなど).でも「いえいえファイルサイズはそれほど大きくありません」という人たちの中にも,実は1つのファイルのサイズが2GBを超える物が含まれていたりするのではないか,と疑っています.DVDのISOイメージを一つ置いたらアウトですからね(それもどうかと思いますが).サーバ側でファイルサイズを調べたのではなく,多くの方はMoodleのインタフェースを介してファイルサイズを確認していると思います.気を付けないと4.3GBのファイルが2GB未満のサイズで表示されますからね(場合によってはマイナスになる...私は初めて見たときは文字通り腰を抜かしました).

#それでも世の中は回っているのだと思うと凄いですね.Y2kどころではないと思うのだけれども.

Takayuki Fukuyama への返信

Re: moodle2.0のzip

- Takayuki Fukuyama の投稿
あの後ぼつぼつと調べていたのですが、Linuxだと例示されているように


あたりでリビルドし直せばとりあえずバックアップだけは出来るようになるかもしれません(時間のあるとき試してみます。実際こちらで管理しているmoodleもエラーを吐いているものが結構あって困っていました)。windowsの場合ビルドするのも厳しそうですが、ビルドできたとしてこれらのサポートが有効になるかどうかはわかりません。(Build your own PHP on Windowsあたりが参考になるかもしれません)。
cygwin内だと擬似unixっぽくは出来るのでしょうが、cygwin1.dllに依存しますし、ビルドできたとしても運用でいろいろと支障をきたす可能性があります(cygwinでは実際数年前に何度か試したことがあるのですがビルドはできてもまともに組み込めなかったり、エクステンションがビルドできなかったりと問題だらけだったので諦めた覚えがあります)

他の切り口としてはpdumpfsなどの別のバックアッププログラムを走らせるといった運用も考えられます。幸いNTFSはハードリンクが使えるのでもしかしたらうまく動くかもしれません(pdumpfs for Windows)。linuxではこの手のツールが結構あるのですがwindowsではどうでしょうか、、他にも探せばあるのかもわかりませんがとりあえずpdumpfsくらいしかパっとでてきませんでした。


Umeda Junichi への返信

Re: エラーメッセージについて

- Tatsuya Shirai の投稿

>  記載のあった、PHPの再コンパイルも試みて見ましたが・・・組み込み型のPHPに合せて渡すパラメータ等がうまくいっていないのか、そもそもパラメータの渡し方もあっているのか不明でPHPだけを置き換えることが出来ませんでした。(このあたりは私の知識不足で申し訳ない限りです。)

PHP manualのfilesize()のコメント(http://jp.php.net/manual/ja/function.filesize.php)に以下のようなものがありました.OSの64bit化も必須のようですね.


filesize() acts differently between platforms and distributions.

I tried manually compiling PHP on a 32bit platform. Filesize() would fail on files >2G.

Then I compiled again, adding CFLAGS=`getconf LFS_CFLAGS` in front of configure.

Then filesize() would success, but the result would be converted to a 32bit signed integer...

However on 64bit systems, PHP's integers are 64bit signed, and this would work just well...

So now the question is : should linux distributions (Debian, etc) define LFS_CFLAGS or not ? Doing so makes PHP be able to open/seek such files, but makes its behaviour buggy (stat() is supposed to fail if file size is >32bit and appl does not support such integers)...

Tatsuya Shirai への返信

Re: エラーメッセージについて

- Umeda Junichi の投稿

情報ありがとうございます。

OSの64bit化が必須であれば・・・今後のことも考え64bit環境で再構築した方が今後の為にはなりそうですね。

PHPの置き換えに失敗したのはEasyPHP組み込みのPHPの為、置き換えたら動作すらしなくなってしまいました。やはり素人の浅知恵で再コンパイルは難しい様です・・・(^^;

頂いたリンクのコメントを読んでいたところDosコマンドを使ったファイルサイズ取得は外部コマンドを使うにしろファイルサイズの表示にしろ使えそうだと思いました。(32bit PHPのみではファイルサイズを正しく拾えないので、この方法でファイルサイズを取得できれば2GBor4GBを超えた時だけバックアップ手法を変え分割する&リストアの際、ファイルが分割されている事がわかるファイルを作成する・・・などの改造が出来そうな気がしました。)

Chisako Salazar への返信

Re: エラーメッセージについて

- Chisako Salazar の投稿

以前にサーバを経由していないPCで対応していると書きましたが、レンタルサーバでした。

あまりにも初心的な間違いでお恥ずかしいのですが、もう少しアドバイス頂きたく、宜しくお願いいたします。

こちらから派生した専門的な内容の方に「タイムアウトの制限値(max_execution_time)を延ばす 」という方法がありましたが、これは私の状況でも可能なですか?

また、可能な場合、どのようにすれば出来るのでしょうか?

宜しくお願いいたします。

Chisako Salazar への返信

Re: エラーメッセージについて

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
> こちらから派生した専門的な内容の方に「タイムアウトの制限値(max_execution_time)を延ばす 」という方法がありましたが、これは私の状況でも可能なですか?

Moodleをインストールしているディレクトリ (フォルダ) の中に「.htaccess」というファイルがあると思います。このファイルを開いて、下記のような設定を入れてみてください。240は秒数です。最大実行時間を5分に伸ばしたいときは、240を300にしてください。

php_value max_execution_time 240

念のため、レンタルサーバの管理者に「max_execution_timeを自分で変更できますか?」とお尋ねください。

ご参考までに、こちらの内容もどうぞ。笑顔
[27.3. How to change PHP parameters when you don't have access to php.ini]
http://www.karakas-online.de/EN-Book/change-php-parameters.html



Mitsuhiro Yoshida への返信

Re: エラーメッセージについて

- Chisako Salazar の投稿

早速、解りやすい説明を頂き、有難うございます。

レンタルサーバ管理者の方に確認の上、試してみたいと思います。

それにしてもいろいろと勉強が必要なことを改めて感じています。