iPhone、iPadのバックアップフォルダが破損した場合のデータの救出

この記事は「iPhone、iPadからデータが失われ、過去にPCでバックアップを暗号化なしで行いバックアップフォルダ(MobileSync→Backupフォルダ)は存在するが、Backupフォルダの一部が破損していてiTunesで復元ができない場合」の無料でできるデータ救出方法です。

・iTunesの復元でだめだったパターン

Backupの復元を一部のファイルが欠けた状態で行った

→すぐに、「バックアップ壊れているため、iTunesはiPhoneを復元できませんでした。」のエラー

 

Backupの復元をダミーファイルでとりあえず全部そろえて、行った

→復元作業が始まってiPhoneにデータを転送し終わって完了したかと思ったら「バックアップ壊れているため、iTunesはiPhoneを復元できませんでした。」と出て無理だった

よってiTunesでの復元は諦めた

バックアップフォルダよりハッシュ化されたデータを人間が見やすいように変換させる

これはbackupフォルダ→ハッシュ化されたフォルダ→manifest.dbが破損していなく、フォルダが暗号化されていない場合のみに有効です!

仕組みとして、iPhoneのデータはハッシュ化されているが、manifest.dbに基本的なデータ情報が残っている。そのためそこから逆引きみたいな形でデータを復元させる

やり方

1.VMWareでUbuntuをインストール

VMWare Player :https://www.vmware.com/

Ubuntuのダウンロード:https://ubuntu.com/download

今回は19.10を使用した

WMwareでUbuntuのインストールと起動は他のところで調べてください

 

2.UbuntuでアップデートしてGitとSQLITE3など必要なソフトをインストール

https://github.com/inflex/ideviceunback

これがmanifest.dbからファイルを復元するソフトです

・ubuntuでterminalを起動

sudo apt update

sudo apt upgrade

sudo apt-get install git

sudo apt-get install libsqlite3-dev

#これないとideviceunbackのmakeのときに「fatal error: sqlite3.h: No such file or directory」とでる

3.ideviceunbackをGitからダウンロードしてコンパイル

git clone https://github.com/inflex/ideviceunback.git

cd ideviceunback

make

#エラーが出なければ成功です!

4.フォルダをVMwareのubuntuにコピー

色々なコピー方法がありますが、VMwareだとドラッグアンドドロップでファイルをUbuntu内に転送できます。

5.バックアップフォルダを人間が見やすいように変換

terminalで

ideviceunback -v -i path/to/backup -o output/path


これでoutputフォルダに変換されたファイルが見えます!

エラーが出る、出力が何もされない場合はmanifest.dbが破損しているか、暗号化されている可能性が高いです。残念ですが回復は厳しいです

 

 

Windowsのエラーでコピーできないファイル(CRC32エラー)をフォルダごと強制コピーさせるソフト

fcopyやCD recoveryというファイルごとに巡回冗長検査エラー(CRC32エラー)を強制コピーするソフトは世の中に存在するんだけど、なぜかディレクトリをまるごと強制的にコピーするソフトが存在しなかった。

なので自分で改良して、Batファイルを作成しました。

こちらからダウンロードできます。

dirFcopyをダウンロード

・ブロック単位でファイルをコピーする。

・ブロックサイズはデフォルトで32KB

・リードエラーが出たブロックは、0で埋められてコピー先ファイルに書き込まる。

というFcopy.exe

リンク:http://hyperstoneapple3.dip.jp/fcopy/fcopy.htm

のデフォルトの仕様をそのまま引き継いでいます。

使い方は

ダウンロードしたdirfcopy.batがあるフォルダでWindows PowerShell やCommand Promptを起動し

 

./dirfcopy.bat “破損元データがあるフォルダ” “出力先フォルダ”

で動きます。

 

あまり使う機会ないかもしれないけど、どうぞ使って下さい

 

For English user

dirFcopy force to copy data even if there is a CRC32 error (or some error)

You can copy each folder

・Copy files in blocks

・Block size is 32KB by default

・The block is overwritten with zero where the read error occurred 

Download:dirFcopy

How to use

In Windows PowerShell or Command Prompt

just enter

./dirfcopy.bat “source directory” “destination directory”

DLMarketの代わりのコンテンツ販売サイト

いつの間にかDLMarketが閉鎖していた。不正アクセスが原因らしい。

今回データコンテンツを販売したいなーと思ったら、直ぐに見つかった。

Note.muです

多分WEBに詳しい人だったら一度は見たこと有ると思うけど、このサイトならDLMarket的な使い方は出来ると思う。

ただし、無料アカウントの有料Noteのコンテンツの料金は、100円〜10,000円の範囲内です。
プレミアム会員は上限50,000円までらしい。

月500円払えばプレミアム会員とのことです。

とりあえず無料で試してみよう。

新規薬局開業で近隣大手薬局からの嫌がらせ

この間、新規店舗開業のお客さんのところに当社の監査システムが導入されることになって色々話を聞いてた。

この新規店舗を開設した方(以降Aさんと呼ぶ)は自身が薬剤師でMRを数年経験してその後独立という経緯。

MRだから先生が院外処方に変えて、それで薬局を開くパターンかと思うけど、そのパターンは現在はそこまで件数として多くない。

Aさんのパターンは簡単に言うとすでにある市場への殴り込みである。

実はというか、知っている人は知ってるんだけど県がやっている公式の医療ページに実際に処方した患者さんの数を公開している。

Aさんはこのページのデータを1つづつ検証して、良さそうな立地、賃料などを色々調べて、とある地域で繁盛しているクリニックが何件もあるのに大手薬局が1件程度しかない場所を見つけたとのこと。

オーソドックスだけど患者さんが読みやすく確実な方法である。

実際オープンして1年経ってないけどすでに1日で20人ほど患者さんは来てくれて経営は安定してきたのこと。

それだけ聞くと順調で良かった良かったという話だがそういうわけでない。

 

当たり前だが、殴り込みしたのだから近隣の薬局とバチバチとのこと。(でも別に何も悪くない)

まぁそれだけなら良くあることだし、市場の原理からして仕方のないことだと思うんだけど、問題はこの後。

どうも殴り込みをかけられた大手薬局が卸業者に圧力をかけてAさんの薬局に薬を全く卸しくてくれないと。

近隣の卸業者は全部ダメで、それは違法というか典型的な不正競争防止法違反である。

仕方なく他県の業者から卸してもらっている。

でも先発とかは取り扱いがないから、2次卸?的な感じでわざわざ他社を挟んでる。

大手卸→薬局→他県卸→Aさんの薬局

みたいな感じとのこと

このご時世でもそんなことが有るんだなぁとか思いながら、大手薬局グループが地域を独占するとこんな事が起こるんだと、世の中の怖さを再認識した瞬間だった。

 

MT4でヒストリーセンターから一括でCSVに出力

MT4でヒストリーセンターよりダウンロードした過去データをエクスポートをするとCSVファイルに出力できるのだが、1分足とかを出力すると65000件しか出力されない。

最初は絞り込められるのはそーゆーものかのかなと思ってたが、これ間違ってた。

デフォルトで外部のソフトなどなしですべてのデータを一括でCSVに出力できます。

MT4のツール→オプション→チャートを選択

チャートの最大バー数:65000となっているところを

2147483647

に変更しましょう

そうすると一括でCSVにエクスポートできます

 

なんかヒストリカルデータをヒストリーセンターから1分足をエクスポートするとめちゃよくバグる

具体的には0/xxxxxxx とかになってデータが何もエクスポートされなかったり、250000/xxxxxxxx とか謎の区切りいい数字に勝手に区切られたりする。

どうも最大バー数を一度小さい値にして、そのあと大きくして、MT4を再起動すると動くことが多い気がする。

バグだろうけど多分修正されないだろうからとりあえず上の方法でやるといいかも

CentOS7のPHP5.4をPHP7.xにアップデートしたらトラブった

当社の会社のHPの更新でPHPのアップデートを行った。

5.4系と7.x系だと処理の速さが違うのとセキュリティ対策(一応centosではデフォルトの5.4系でもサポートはしてくれている)が理由。

まぁ正直一番の理由はGoogleのPageSpeed insightsで当社のHPがすごく悪い結果だったから動作を少しでも早くするために重い腰を上げてアップデートした。

やったこと

参考:CentOS7のPHPを5.6/7.0/7.1/7.2/7.3系にバージョンアップする

【EPELリポジトリ】

yum install epel-release

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

【PHPの削除】

cp /etc/php.ini /etc/php-old.ini

yum remove php-*

【PHP7.xのインストール】

yum install –disablerepo=* –enablerepo=epel,remi,remi-safe,remi-php73 php

yum install –disablerepo=* –enablerepo=epel,remi,remi-safe,remi-php73 php-mbstring

【MySQLとかいれる】

yum install php73-php-mysqlnd

※これ間違ってるから入れないでね

んでOSを再起動した

お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。

よく見るphp.iniにMysql.soのextensionが指定されていないときにでるエラーがでた。

MySQLいれたつもりだったからおかしいなと思いつつなんか色々MySQL関係を入れるか試してみる

当然デフォルトだと5.4系なので標準のはインストールできない

きっとExtensionがおかしいと思ってmysqli.soとかを追加したりしたけど動かない

正しくは

【Mysqlや他の必要な関連パッケージのインストール方法】

yum install –disablerepo=* –enablerepo=epel,remi,remi-safe,remi-php73 php-mysql

※73は7.3って意味

です

だからもし

Fatal error: Class ‘DOMDocument’ not found in 

が出て、php-xmlが必要な場合は

yum install –disablerepo=* –enablerepo=epel,remi,remi-safe,remi-php73 php-xml

をしましょう

 

Windowsで絶対パスかどうかをチェックする正規表現

folderPathRegex=r'^[a-zA-Z]:\\(((?![<>:"/\\|?*]).)+((?<![ .])\\)?)*$'
です
日本語ネットワーク名対応のネットワークフォルダパスは
netfolderPathRegex=r'^\\\\(((?![<>:"/\\|?*]).)+((?<![ .])\\)?){1,}\\(((?![<>:"/\\|?*]).)+((?<![ .])\\)?)*$'
です


ERROR 5 (HY000) at line xxx: Out of memory

MariaDB10.3をインターネット越しにCommand Promptより

c:\xampp\mysql\bin\mysql.exe -h10.0.0.1 -uroot -pPW db_name < D:^\WEB^\test.sql

ってWindowsよりSQLファイルを流したらOut of memoryとかすら出ずに、途中までしかInsertされない。めちゃデカSQLしたらもちろんOut of Memory。

だいたい100MBのSQLファイルでSQLDumpより取得したやつででた

とりあえずCentOS7にいれてるMariaDBのmy.cnfを


[mysqld]

innodb_log_file_size = 400M(たぶんこれはあんまり関係ない)

wait_timeout = 28800(これも関係なさそう?)

max_allowed_packet=512M(これは関係してそう)

って感じで編集したら出にくくなった気がするような、でもまだ出たときがあってなんか不安定

SQLdumpで –quick –skip-extended-insert オプションをつかって処理を少し分割させたけど、エラーでて、少しがっかり。

色々調べてるとSQLがインサート中はテーブルがロックされているような感じだった。

innodb_lock_wait_timeout =180にしたらとりあえず治った??

innodb_lock_wait_timeout が原因??

SQL入れている間はDBにアクセスできない現象が起きたが、これもテーブルロックが原因なんだろうか。なんか違うような。

innodb_lock_wait_timeout =180にしてからはまだ一度も失敗してない。

というか、エラーメッセージなしでコケるのは本当に勘弁してほしい

 

CentOS7.6 にPHP7.2とNginx

個人的メモ

EPELリポジトリの追加

sudo rpm -ivh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

sudo yum -y update epel-release

Remiリポジトリの追加

sudo rpm –import http://rpms.famillecollet.com/RPM-GPG-KEY-remi

sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

sudo yum -y update remi-release

 

sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

sudo yum -y update nginx-release-centos

sudo yum -y –enablerepo=nginx install nginx

nginx -v

 

systemctl enable nginx

systemctl start nginx

firewall-cmd –add-service=http –zone=public –permanent

firewall-cmd –add-service=https –zone=public –permanent

firewall-cmd –reload

 

sudo groupadd -g 2222 hoge

sudo useradd -u 2222 -g hoge hoge

sudo usermod -s /bin/false hoge

sudo passwd hoge

パスの入力

 

PHP7.3インストール

sudo yum -y –enablerepo=remi-php73,epel install php-fpm php-gd php-gmp php-mbstring php-mcrypt php-opcache php-pdo php-pear-MDB2-Driver-mysqli php-pecl-memcached php-pecl-msgpack php-xml

PHPの確認

php -v

 

vi /etc/php-fpm.d/www.conf

user = hoge

; RPM: Keep a group allowed to write in log dir.

group = hoge

 

# 37行目あたり

listen = /var/run/php-fpm/php-fpm.sock

# 48行目あたり

listen.owner = hoge

listen.group = hoge

listen.mode = 0660

 

にする

 

sudo vi /etc/nginx/nginx.conf

# 2行目あたり

user  hoge;

 

sudo systemctl start php-fpm.service

sudo systemctl enable php-fpm.service

 

$ sudo vi /etc/nginx/conf.d # 30行目あたり

    location ~ \.php$ {

        root   /usr/share/nginx/html;

        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;

        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        include        fastcgi_params;

    } /default.conf

 

 

https://qiita.com/ksugawara61/items/0fcf3f72cc905bb6d654

ここと99%一緒なので↑みる

 

ついでにSSLいれてでHTTPS化する

cat medicalfields.jp.crt alphassl_intermediate_ca.cer > medicalfields.jp.pem

 

PEM routines:PEM_read_bio:bad end line.

がでたら

medicalfields.jp.pemのファイルを開いて

間に改行を入れて

—–END CERTIFICATE—–

—–BEGIN CERTIFICATE—–

にする

 

sudo vi /etc/nginx/conf.d/default.conf

server {

    listen 443 ssl;

    server_name _;

    ssl_certificate /etc/nginx/ssl/medicalfields.jp.pem;

    ssl_certificate_key /etc/nginx/ssl/medicalfields.jp.key;

~HTTPをコピペ~

}

 

 

/etc/nginx/conf.d/default.conf

server {

    listen 443 ssl;

    server_name _;

    ssl_certificate /etc/nginx/ssl/medicalfields.jp.pem;

    ssl_certificate_key /etc/nginx/ssl/medicalfields.jp.key;

    location / {

        root   /usr/share/nginx/html;

        index  index.html index.htm;

    }

 

    #error_page  404              /404.html;

 

    # redirect server error pages to the static page /50x.html

    #

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {

        root   /usr/share/nginx/html;

    }

 

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80

    #

    #location ~ \.php$ {

    #    proxy_pass   http://127.0.0.1;

    #}

 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    #

    location ~ \.php$ {

        root           /usr/share/nginx/html;

        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;

        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        include        fastcgi_params;

    }

 

    # deny access to .htaccess files, if Apache’s document root

    # concurs with nginx’s one

    #

    #location ~ /\.ht {

    #    deny  all;

    #}

 

}

server {    

listen 80;    

server_name _ ;    

# ここの部分で判定!!   

if ($http_x_forwarded_proto != https) {     

return 301 https://$host$request_uri;   

}

}

リダイレクトループ対策でIFいれる

 

ロードバランサー

ラウンドロビンのヘルスモニターはPINGで(HTTPだと何か動かない時があったりちょっと不安定だった)

vi /etc/sysconfig/network-scripts/ifcfg-lo:0

 

DEVICE=lo:0

IPADDR=157.7.94.188

NETMASK=255.255.255.255

ONBOOT=yes

 

service network restart

 

オブジェクトストレージをマウントした

https://support.conoha.jp/v/objectstoragemount/

 

 

mount -t svfs object_storage /mnt -o auth_url=https://identity.tyo1.conoha.io/v2.0,username=gncu7228652,password=パス,tenant=gnct7228652

再起動時にマウント

vi /etc/fstab

一番下に

object_storage /mnt svfs auth_url=https://identity.tyo1.conoha.io/v2.0,username=gncu7228652,password=password,tenant=gnct7228652,rw,_netdev 1

 

WindowsのソフトはCyberDuck

https://support.conoha.jp/v/objectstoragecyberduck/

PHPのMPDFの古いバージョンをPHP7.2でつかう

<b>Warning</b>: A non-numeric value encountered in <b>C:\xampp\htdocs\mpdf60\mpdf.php</b> on line <b>32511</b><br />
<br />
<b>Warning</b>: count(): Parameter must be an array or an object that implements Countable in <b>C:\xampp\htdocs\mpdf60\mpdf.php</b> on line <b>1770</b><br />
<br />
<b>Warning</b>: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\mpdf60\mpdf.php:32511) in <b>C:\xampp\htdocs\mpdf60\mpdf.php</b> on line <b>7706</b><br />
<br />
<b>Warning</b>: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\mpdf60\mpdf.php:32511) in <b>C:\xampp\htdocs\mpdf60\mpdf.php</b> on line <b>1746</b><br />
<B>mPDF error: </B>Some data has already been output to browser, can’t send PDF file

とか出てきます。

phpのエラー表示でerror_reporting(0);にしましょう

よほど古くないとたいてい動きます。

またこれとは関係ないけどmPDFの

imgタグの data:image/jpg;base64

で画像が表示されない場合はbase64のJPGのMPDFのファイルサイズ制限は1MBでそれ以下になるようにしましょう(Base64はサイズが増えるからつまり750KBぐらいまでしか実質無理)