пятница, 31 января 2014 г.

Synology NAS

Эта заметка по Synology NAS. Обновляемая

Модель: RS812+

Изначально ОС не установлена, она ставится после установки хотя бы одного HDD. Называется ОС DiskStation Manager (DSM). Представляет собой linux, соответственно можно включить ssh или telnet из веб-морды и зайти в консоль, где будут привычные команды.

При установке на каждом диске создаётся раздел (/dev/sda1, /dev/sdb1, etc) примерно по 2,5 ГБ (DSM v4.3), из которых собирается RAID 1 (/dev/md0), который в свою очередь становится корневым разделом.

суббота, 25 января 2014 г.

Неправильный размер папок owncloud в freebsd x86

Так случилось, что появилась необходимость бэкапить накопленные архивы фотографий, поэтому поставил себе в jail на фряхе owncloud 6.0.0a. Ничего сложного в этом нет, кроме как необходимость собирать nginx, php и mysql с нужными модулями из исходников, т.к. в пакетах нет необходимого. Может как-нибудь в будущем накатаю пост об этом.

Итак, в установленном и работающем ownCloud размеры синхронизированных папок отображаются неправильно: максимально показывается 2ГБ на папку, а общие занятое и свободное пространства неверные.

Проблема кроется в том, что в 32-битной версии php целое число integer может иметь максимальное значение ~ 2 млрд (2 147 483 647 Байт = 2ГБ), а именно приведение к целому числу и используется в owncloud при постройке кэша, например:
$data['size'] = (int)$data['size'];
Нам же необходим тип float или long, поэтому пользователь MiguelDomingues с форума owncloud предлагает вместо приведения к int заставить php самому конвертировать число в нужный тип при помощи сложения с нулем. Для этого надо подредактировать некоторые файлы:


1. Редактируем /path/to/owncloud/lib/private/files/cache/cache.php
Меняем в строке 145:
CODE: SELECT ALL
$data['size'] = (int)$data['size'];

на:
CODE: SELECT ALL
$data['size'] = 0+$data['size'];


Меняем в строке 149:
CODE: SELECT ALL
$data['unencrypted_size'] = (int)$data['unencrypted_size'];

на
CODE: SELECT ALL
$data['unencrypted_size'] = 0+$data['unencrypted_size'];


Меняем в строке 425:
CODE: SELECT ALL
if ((int)$row['size'] === -1) {

на:
CODE: SELECT ALL
if (0+$row['size'] === -1) {


Меняем в строках 519-520:
CODE: SELECT ALL
$sum = (int)$sum;
$min = (int)$min;

на:
CODE: SELECT ALL
$sum = 0+$sum;
$min = 0+$min;


2. Редактируем /path/to/owncloud/lib/private/files/cache/homecache.php
Меняем в строке 32:
CODE: SELECT ALL
$totalSize = (int)$sum;

на:
CODE: SELECT ALL
$totalSize = 0+$sum;


3. Редактируем /path/to/owncloud/apps/files_sharing/lib/cache.php
Меняем в строке 100:
CODE: SELECT ALL
$data['size'] = (int)$data['size'];

на:
CODE: SELECT ALL
$data['size'] = 0+$data['size'];


Чтобы работала загрузка больших файлов:
3. Редактируем /path/to/owncloud/lib/private/connector/sabre/server.php
Меняем в строке 172:
CODE: SELECT ALL
$newProperties[200][$prop] = (int)$node->getSize();

на:
CODE: SELECT ALL
$newProperties[200][$prop] = 0+$node->getSize();

Кстати, можно заменить (int) на (float) вместо операции сложения. Размера в 3.4e38 на 32-битной платформе будет вполне достаточно.
ссылка на оригинал