Для скачивания требуется доступ к хранилищу. Строим домашнюю сеть. Сетевой накопитель. Что это такое

Файловая система Android очень похожа на файловые системы, основанные на дисках, используемые в других системах. В данном уроке рассказывается как работать с файловой системой Android, читать и записывать файлы, используя класс File .

Выбор между внутренним и внешним хранилищем

Все устройства под Android имеют два пространства для хранения файлов: внешнее и внутреннее хранилища. Эти названия остались от первых устройств на Android. На большинстве устройств применялась энергозависимая память (внутреннее хранилище ) и съемные устройства, вроде microSD карт (внешнее хранилище ). На некоторых устройствах постоянное место хранения делится между внутренним и внешним разделами, поэтому даже без SD карт у нас будет и “внутреннее” и “внешнее” пространство. При этом для API неважно располагается ли внешнее пространство на съемном устройстве или нет. В списке приведены общие факты об обоих типах пространства:

  • Внутреннее хранилище:
  • Всегда доступно.
  • По умолчанию доступ к файлам разрешен только для приложений, создавших эти файлы.
  • При удалении приложения, из внутреннего хранилища удаляются все файлы приложения.
  • Внутреннее хранилище лучше подходит, если вы хотите быть уверены, что другие приложения не получат доступ к данным.
  • Внешнее хранилище:
  • Не всегда доступно, поскольку пользователь может вытащить съемную память из устройства.
  • Файлы могут быть прочитаны любым приложением.
  • При удалении приложения файлы будут удалены только в том случае, если вы сохранили их в директории, полученной с помощью метода getExternalFilesDir() .
  • Внешнее хранилище – это отличное место для файлов, которые не нуждаются в особой секретности. Также во внешних хранилищах могут храниться файлы, которые могут быть открыты на компьютере пользователя или те, которые вы хотите использовать сразу в нескольких приложениях.

Получение прав для внешнего хранилища

Для записи во внешнее хранилище, вы должны запросить права WRITE_EXTERNAL_STORAGE в файле манифеста :

...

< manifest . . . >

< uses - permission android : name = "android.permission.WRITE_EXTERNAL_STORAGE" / >

. . .

< / manifest >

Внимание: в настоящее время, все приложения имеют права на чтение файлов из внешнего хранилища без получения специального разрешения. Однако это изменится в будущих версиях. Если ваше приложение должно читать файлы из внешнего хранилища (но не писать), необходимо получить право READ_EXTERNAL_STORAGE . Чтобы гарантировать, что ваше приложение всегда будет работать так, как вы ожидаете, объявляйте права на чтение уже сейчас, чтобы не беспокоиться об этом в будущем:

...

< manifest . . . >

< uses - permission android : name = "android.permission.READ_EXTERNAL_STORAGE" / >

. . .

< / manifest >

Однако если ваше приложение использует право на запись WRITE_EXTERNAL_STORAGE , права на чтение будут неявно заданы.

Вам не нужно получать какие-либо дополнительные разрешения для сохранения файлов во внутреннем хранилище. Приложения всегда имеют права на запись и чтение из директорий внутреннего хранилища.

Сохранение файлов во внутреннем хранилище

При сохранении файлов во внутреннем хранилище, можно получить соответствующую директорию как объект типа File , вызвав один из методов:

getFilesDir() Возвращает объект типа File представляющий директорию внутреннего хранилища для вашего приложения. getCacheDir() Возвращает объект типа File представляющий директорию внутреннего хранилища для хранения временных кэш файлов. Обязательно удаляйте все файлы, как только вы перестаете в них нуждаться и установите разумное ограничение на количество памяти, которое вы используете в определенный момент времени, например 1Мб. Если в системе останется мало места для хранения, она может удалить ваши временные файлы без предупреждения.

Чтобы создать новый файл в одной из директорий, вы можете использовать конструктор File() , передав в него объект типа File, полученный с помощью соответствующего метода:

File file = new File(context.getFilesDir(), filename);

File file = new File (context . getFilesDir () , filename ) ;

Можно также использовать метод openFileOutput() для получения объекта FileOutputStream , который записывает файл во внутренний каталог. Пример записи некоторого текста в файл:

String filename = "myfile"; String string = "Hello world!"; FileOutputStream outputStream; try { outputStream = openFileOutput(filename, Context.MODE_PRIVATE); outputStream.write(string.getBytes()); outputStream.close(); } catch (Exception e) { e.printStackTrace(); }

String filename = "myfile" ;

String string = "Hello world!" ;

FileOutputStream outputStream ;

try {

outputStream = openFileOutput (filename , Context . MODE_PRIVATE ) ;

outputStream . write (string . getBytes () ) ;

outputStream . close () ;

} catch (Exception e ) {

e . printStackTrace () ;

Или если необходимо создать временный файл, используйте createTempFile() . В следующем примере метод получает имя файла из URL и создает файл с указанным именем во внутренней временной директории:

public File getTempFile(Context context, String url) { File file; try { String fileName = Uri.parse(url).getLastPathSegment(); file = File.createTempFile(fileName, null, context.getCacheDir()); catch (IOException e) { // Ошибка при создании файла } return file; }

public File getTempFile (Context context , String url ) {

File file ;

try {

String fileName = Uri . parse (url ) . getLastPathSegment () ;

file = File . createTempFile (fileName , null , context . getCacheDir () ) ;

catch (IOException e ) {

// Ошибка при создании файла

return file ;

Примечание: расположение каталога внутреннего хранилища вашего приложения в файловой системе Android зависит от имени пакета. Технически, другое приложение может прочитать ваши внутренние файлы, если вы установите режим доступа для чтения. Однако другому приложению понадобится также знать название пакета вашего приложения и имя самого файла. Другие приложения не могут просматривать содержимое внутреннего хранилища и не имеют права чтения и записи, пока явно не указано что файл может быть прочитан или записан. Так что пока вы используете флаг MODE_PRIVATE для ваших файлов во внутреннем хранилище, они будут недоступны для других приложений.

Сохранение файлов во внешнем хранилище

Поскольку внешнее хранилище может быть недоступно – например при подключении устройства к компьютеру или при удалении SD карты, вы должны всегда проверять раздел на доступность, прежде чем попытаться его использовать. Вы можете запросить состояние внешнего хранилища с помощью метода getExternalStorageState() . Если метод вернул состояние, равное MEDIA_MOUNTED , вы можете читать и записывать ваши файлы. Пример метода проверки внешнего хранилища на доступность:

/* Проверяем хранилище на доступность чтения и записи*/ public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; } /* Проверяем внешнее хранилище на доступность чтения */ public boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return true; } return false; }

/* Проверяем хранилище на доступность чтения и записи*/

public boolean isExternalStorageWritable () {

if (Environment . MEDIA_MOUNTED . equals (state ) ) {

return true ;

return false ;

/* Проверяем внешнее хранилище на доступность чтения */

public boolean isExternalStorageReadable () {

String state = Environment . getExternalStorageState () ;

if (Environment . MEDIA_MOUNTED . equals (state ) ||

Environment . MEDIA_MOUNTED_READ_ONLY . equals (state ) ) {

return true ;

return false ;

Хотя содержимое внешнего хранилища может быть изменено пользователем или другим приложением, есть две категории файлов, которые вы можете в нем хранить:

Публичные файлы Файлы, которые должны быть доступны другим приложениям и пользователям. После удаления приложения эти файлы должны оставаться доступными пользователю. Это, например, фотографии, сделанные в вашем приложении, или скачанные файлы. Приватные файлы Файлы, по праву принадлежащие приложению, которые должны быть удалены вместе с приложением. Хотя эти файлы технически доступны для пользователя и других приложений, поскольку они находятся во внешнем хранилище, реально они не предоставляют свои данные за пределами приложения. При удалении приложения, все такие файлы будут также удалены. Это, к примеру, временные медиа-файлы.

Если вы хотите сохранить публичные файлы по внешнем хранилище, используйте метод getExternalStoragePublicDirectory() для получения объекта типа File соответствующего каталогу. В качестве аргумента метод принимает тип файла, который вы хотите сохранить, логически он может быть организован с другими публичными файлами, например каталоги музыки (DIRECTORY_MUSIC) или картинок (DIRECTORY_PICTURE). Например:

public File getAlbumStorageDir(String albumName) { // Получение публичного каталога картинок File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) { Log.e(LOG_TAG, "Directory not created"); } return file; }

public File getAlbumStorageDir (String albumName ) {

// Получение публичного каталога картинок

File file = new File (Environment . getExternalStoragePublicDirectory (

Environment . DIRECTORY_PICTURES ) , albumName ) ;

if (! file . mkdirs () ) {

Log . e (LOG_TAG , "Directory not created" ) ;

return file ;

Если вы хотите сохранить приватный файл приложения, воспользуйтесь методом getExternalFilesDir() и передайте имя типа директории. Каждая созданная таким образом директория добавляется к корневой директории вашего приложения и собирает в себе все внешние файлы, которые будут удалены вместе с приложением.

Пример создания директории собственного фотоальбома:

public File getAlbumStorageDir(Context context, String albumName) { // Получение приватной директории для фотоальбома приложения File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) { Log.e(LOG_TAG, "Directory not created"); } return file; }

Помните, что getExternalFilesDir() создает каталоги внутри директории, которая будет удалена вместе с приложением. Если файлы должны быть доступны после удаления приложения, например снимки с камеры, используйте метод getExternalStoragePublicDirectory() .

Очень важно использовать имена директорий, представленных константами API, такие как DIRECTORY_PICTURES независимо от того, использовался ли метод getExternalFilesDir() или getExternalStoragePublicDirectory() . Предопределенные имена директорий позволяют системе правильно обрабатывать ваши файлы. Например, файлы сохраненные в директории DIRECTORY_RINGTONES будут помечены системным медиа-сканером как мелодии звонка, а не как музыкальные файлы.

Запрос свободного пространства

Если вы заранее знаете как много данных вам надо сохранить, вы можете узнать достаточно ли места, не дожидаясь исключения IOException , с помощью методов getFreeSpace() или getTotalSpace() . Данные методы позволяют узнать количество свободного и общего пространства на разделе хранилища, соответственно. Данная информация также полезна, чтобы избежать заполнения раздела хранилища выше определенного порога.

Однако система не гарантирует, что вы можете записать столько же, сколько показывает метод getFreeSpace() . Если свободного места немного больше, чем вы хотите сохранить, или если файловая система заполнена меньше, чем на 90%, вероятно можете продолжать, иначе лучше воздержаться.

Примечание: вам не обязательно проверять количество свободного места перед записью вашего файла. Вы можете попробовать записать файл и обработать исключение IOException . Вы также можете не знать точно сколько места вам нужно. Например, если вы меняете кодировку файла перед сохранением, например конвертируете PNG в JPEG, вы можете не знать конечного размера файла.

Nafa 647 14.01.10 02:27 Сейчас в теме

Статья полезная.
В работе хранилища действительно очень много неочевидных вещей, поэтому мои дополнения:
1. Если работают несколько программистов, то как вариант,
рабочий день обычно начинается со следущего:
запускаем свою базу в конфигураторе, на корне конфигурации правой кнопкой мышки - получить из хранилища, включаем галочку "рекурсивно", жмем ОК. После этого в конфигурацию получаем все, что наработали другие из хранилища. САМУ БД НЕ ОБНОВЛЯЕМ!!!
Далее желаем "сравнить конфигурацию с конфигурацией БД" - и видим список все изменений сделанных другими программистами группы за предыдущий день. Если есть вопросы по изменениям- обращаемся к тому, кто их делал.
После того, как все разобрали - сохраняем в БД.
Почему не сравнить с конфигурацией хранилища - во-первых чтобы не показывались те объекты, над которым сам работаешь, во-вторых это работает быстрее.
2. В середине дня: срочные изменения (для динамического обновления) отправляем в хранилище сразу. Не срочные - после того, как изменим все связанные объекты. (см. пояснение ниже)
3. В конце дня (а если надо делать полное обновление базы - то перед ним) сдаем в хранилище все что можно.
Это не обязательный порядок, но весьма удобный.

4. Почему не помещаем сразу:
потому что целостность изменений контролируется 1С только там где есть ссылка. То есть если например вы сделали справочник "Автомобили клиентов" и добавили ссылку на него в "расходную накладную", то поместить "Расходную накладную" в хранилище Вы сможете только после (или одновременно) со справочником "Автомобили клиентов". Но если Вы например использовали этот справочник в процедуре общего модуле, которая вызывается при проведении расходной накладной, то этот общий модуль в хранилище спокойно поместиться без помещения справочника. Если после этого другой программист получит этот модуль из хранилища, то в его базе расходные накладные проводиться перестанут. (А если обновить основную базу - то и там перестанут).
И то еще хороший случай - так как возникает просто ошибка. А вот если Вы например изменили тип реквизита в документе со строки на текст и в процедуре общего модуля была проверка Если Реквизит = "1" а стала Если Реквизит = 1 и модуль в хранилище поместили а документ - нет, то ошибки не будет (привет отсутствию контроля типов), а значит у тех кто такой модуль получит документы будет неправильно проводиться, (и хорошо если это будет не основная база). Поэтому изменения лучше сдавать в хранилище "полным пакетом" (все измененные по одной теме объекты), если что-то нужно Вам для другой задачи - можно сразу же захватить по новой или просто, помещая в хранилище, "оставить захваченным".

В этом плане я не совсем понял:

Если программистов много - то изменения каждого нужно отправлять в Хранилище поочереди, ПРЕДВАРИТЕЛЬНО выгрузив у всех работу во внешние файлы с конфигурацией локальной БД и (если объединение делается с разных рабочих мест), не забывая перед каждым объединением ОБНОВЛЯТЬ локальные БД из Хранилища - до последней версии, с присутствующим там изменениями ранее подключенных товарищей..

Странно, не было никаких проблем когда несколько человек сразу изменения помещали, разве что подтормаживало малость. На то захват объектов и предусмотрен, чтобы 2 человека сразу одно и то же не исправили. Причем было замечено, что: если 1 разработчик изменил документ, скажем "Авансовый отчет", а затем второй "получения" не делал, а сразу его захватывает (например, объект только что помещен в хранилище), то 1С это отследит и сама даст ему уже новую - измененную версию. (Так прикольно бывает - смотришь на документ - 5 реквизитов, захватываешь - уже 15).

И зачем работу во внешние файлы выгружать тоже не понял.

4. Создание копий базы для программистов проще делать не 1Совской загрузкой-выгрузкой (т.к. она требует монопольного режима и не шибко шустрая), а восстановлением скульного бекапа или просто копированием базе на скуле.

5. Если нужно добавить новый объект (документ, справочник и пр), то захватите корень конфигурации, добавьте его, добавьте минимум реквизитов (совсем "пустые" объекты не всегда сохраняется), сдайте корень в хранилище (этот объект тоже сдастся при этом) и заберите объект опять. (Чтобы не держать корень долго захваченным - он и другим нужен).

6. Если Вы хотите исправить права доступа на объект, захватили его - а права доступа по прежнему недоступны - захватите соответствующую роль.

7. Поскольку отладку лучше всего вести на максимально свежих данных, то рабочие базы нуждаются в обновлении. Для этого: поместите все изменения в хранилище, отключите базу от хранилища, перепишите в нее на скуле основную базу (из бекапа или просто скопируйте), подключите по-новой.

8. Когда делаем "получить все из хранилища" (п. 1) бывает, что 1с выдает кучу сообщений а потом пишет, что "не удалось" (список объектов при этом меняется). Значит давно не получали изменения. Ничего страшного, жмем ОК по новой и так до тех пор, пока не сработает, как надо.

9. Иногда 1С отказывается сохранять полученные из хранилища изменения, причем сообщение выдает абсолютно невнятное. Виновниками обычно являются "регистры сведений". Выясняем, у какого регистра сведений менялась структура, удаляем из него в своей базе все записи, после этого все обновится как надо.

10. Поскольку рабочие базы делаются из основной, то названия конфигураций совпадают и их легко перепутать и потом начинаются непонятки, когда пользователе говорит что у него в отчете 100 руб, а у Вас - 100,000 руб. Как вариант, добавляем в модуль приложения строчку, проверяющую при запуске программы что это за база и если не основная - выводящую это в заголовке программы 1С (например "РАБОЧАЯ БАЗА ПРОГРАММИСТА ИВАНОВА")

11. Когда база подключена к хранилищу, но при запуске не удалось к нему подключиться по любым причинам, то может выдаться сообщение "Не удалось подключиться, выполнить отключение от хранилища" (а у Вас есть захваченные объекты) - тут ОТВЕЧАЙТЕ "НЕТ". Но если случайно ответить "да" то - не пытайтесь подключиться по новой!!! Сначала сохраните конфигурацию в файл!!! Так как когда подключаемся к хранилищу, то вся конфигурация базы заменяется на конфигурацию хранилища. После этого загружаем изменения из сохраненного файла и работаем дальше.

Мое приложение хранит файлы во внутреннем каталоге хранилища (/Android/data/com.mycompany.myapp/files, как было возвращено getFilesDir()), и я хотел бы разрешить пользователям обращаться к этим файлам непосредственно из управления файлами приложение на своем мобильном устройстве или приложение Android File Transfer для рабочего стола.

2 ответов

Я более подробно рассмотрел результат getFilesDir() vs getExternalFilesDir() и обнаружил, что getFilesDir() возвращает /data/data//files , а getExternalFilesDir() возвращает /Android/data//files . Я думал, что файлы приложений, которые я просматривал в /Android/data , были внутренними каталогами хранилища, но теперь я вижу, что это фактически внешние каталоги хранения.

Если внутренние папки хранения никогда не доступны для обычных пользователей, я хочу, чтобы в документации говорилось, что вместо того, чтобы говорить, что они недоступны "по умолчанию". По крайней мере, для меня, говоря "по умолчанию", подразумевается, что поведение по умолчанию может быть изменено.

В любом случае, я протестировал и подтвердил, что если я удалю свое приложение, файлы, сохраненные в getExternalFilesDir() , будут удалены автоматически. Таким образом, это соответствует моей потребности в местоположении хранилища, которое явно связано с приложением (использует имя конкретного приложения и удаляется с помощью приложения), но доступно пользователям для случайного ручного управления файлами.

Вот сравнение, которое может быть полезно для кого-то другого, читающего это:

Я думаю, что вы запутались в документации разработчиков, я не могу вас обвинить, это не лучшая документация, которую я когда-либо читал. В любом случае, Android предоставляет два способа сохранения файлов в файловой системе:

  • Использование внутреннего хранилища
  • Использование внешнего хранилища

Внутреннее хранилище ВСЕГДА доступно и доступно ТОЛЬКО вашему приложению, никакое другое приложение в системе не может получить доступ к файлам, сохраненным в этом разделе.

Теперь я думаю, что вам нужно Внешнее хранилище , потому что оно "доступно для чтения" и доступно любому пользователю и любым приложениям. Недостатком является то, что он может быть недоступен, так как пользователь может установить его на USB-устройство, которое может быть удалено пользователем в любое время.

Вы не должны использовать ни MODE_WORLD_WRITEABLE , ни MODE_WORLD_READABLE , как указано в документации, потому что это очень опасно. Кроме того, эти константы устарели, поскольку уровень API 17

Если вам нужно сделать ваши файлы общедоступными, сохраните их в Внешнем хранилище . Вам нужно будет объявить разрешение в вашем файле манифеста, чтобы избежать сбоя приложения при каждом доступе к Внешнему хранилищу ...

поскольку Внешнее хранилище может быть недоступно, вам нужно будет определить его состояние перед выполнением какой-либо операции, иначе ваше приложение выйдет из строя...

Public enum StorageState{ NOT_AVAILABLE, WRITEABLE, READ_ONLY } public StorageState getExternalStorageState() { StorageState result = StorageState.NOT_AVAILABLE; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return StorageState.WRITEABLE; } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return StorageState.READ_ONLY; } return result; }

Более подробная информация о документации и вещах, о которых вы должны знать. Например, вы можете предоставить владельцам своих файлов эти файлы, чтобы при удалении приложения система могла автоматически удалять эти файлы. Для получения дополнительной информации см. Документацию на сайте разработчиков Android

поделиться

С ростом мегапикселей фото- и видеокамер проблема хранения домашнего медиаконтента все чаще возникает у большого числа пользователей ПК. Конечно, жесткие диски стоят сегодня не так уж и дорого, а их объем исчисляется терабайтами, но и этого бывает мало.

Вариантов расширения емкости доступного дискового пространства существует несколько. Если у вас обычный «большой» компьютер, то самый простой из них - установка в него новых винчестеров. Более универсальный способ - использование внешних дисков. Однако наиболее удобным (и дорогим) будет установка в домашней локальной сети сетевого накопителя.

Он позволит вам иметь постоянный доступ с любого ПК или плеера ко всей медиабиблиотеке, хранить резервные копии документов и системных разделов компьютеров, обмениваться файлами через интернет без участия ПК и многое другое. Кроме того, эти устройства отличает небольшой (по сравнению с ПК) размер и низкий уровень энергопотребления и шума. Так что если у вас не коттедж с парой подсобных помещений, то компактный сетевой накопитель может быть очень удачным выбором. Кстати, есть даже модели для 2,5-дюймовых винчестеров.

Поскольку наша сеть уже включает роутер , то достаточно только подобрать нужную модель NAS и подключить ее к сети. Для начинающих пользователей, которые не уверены в необходимости десятков терабайт, лучше всего посмотреть на устройства с установкой одного или двух винчестеров. Они сегодня наиболее оптимальны для домашнего использования. А если не будет хватать места - к ним можно будет подключить внешние USB- или eSATA-диски. Если же вы уже заранее понимаете, что пары дисков точно не хватит - есть модели на 4, 5, 6 и более дисков. Правда, их стоимость относительно велика. Большинство устройств продаются без винчестеров, так что их надо будет приобретать отдельно. Для справки лучше всего ориентироваться на списки совместимости производителей. Гнаться за самыми быстрыми винчестерами в данном случае нет смысла. Лучше подбирать их по низкому уровню энергопотребления, нагрева и шума.

Стоит также упомянуть о возможности использования в качестве NAS отдельного выделенного обычного ПК. Но в этом материале речь будет идти именно о готовых сетевых накопителях.

К сети практически все устройства подключаются по гигабитному соединению, поскольку 10-12 МБ/с, которые обеспечивает FastEthernet, по плечу уже самым простым моделям и сегодня смотрятся совсем несерьезно.

В качестве встроенной операционной системы обычно используется Linux, но встречаются варианты и с Windows Home Server. Во втором случае сервер практически не отличается от домашнего ПК, только общение с ним происходит исключительно по сети. WHS снабжена качественной документацией и многочисленными «помощниками», так что разобраться будет несложно. Большинство информации далее в этой статье к этому варианту не относится.

Если вас пугает общение с Linux, то на самом деле ничего сложного в данном случае нет - пользователю доступен удобный web-интерфейс, через который можно настроить все нужные параметры и функции. Но если добраться до командной строки - то можно будет работать с устройством практически как с обычным компьютером.

Кроме операционной системы, есть также смысл обратить внимание на возможности устройства. В настоящее время кроме обычного хранения файлов сетевые накопители предоставляют сервисы медиасервера, загрузки файлов, удаленного доступа и другие.

Что касается аппаратной платформы и производительности, то модели на x86-совместимых процессорах относятся к наиболее производительному (и дорогому) сегменту, в центре выступают ARM-процессоры с частотой 1000-1600 МГц, а замыкают линейку обычно младшие ARM. В реальности стоит смотреть не на саму платформу, а результаты ее конкретной реализации, поскольку оптимизацией программной оболочки можно многого достичь.

От объема оперативной памяти зависит эффективность работы дополнительных сервисов, так что мы бы рекомендовали выбирать устройства с 256 МБ или выше, если планируется использовать не только сетевой доступ к файлам. Хотя и для первого ознакомления вполне достаточно и 64 или 128 МБ. Только не ждите от них слишком многого.

В этот раз мы используем модель DS210+ одного из наиболее популярных производителей данного сегмента рынка - компании Synologу. Это двухдисковое устройство, кроме реализации сервисов сетевого хранения файлов, имеет и множество дополнительных функций и может быть очень полезным как для домашнего использования, так и в офисах.

Нужно отметить, что обычно у всех производителей возможности прошивок практически одинаковы для всех моделей линейки и обновляются одновременно. Более полно познакомиться с устройствами Synology можно в недавнем обзоре DS710+ .

Сборка

Чаще всего сетевые накопители продаются без винчестеров и пользователю нужно их приобрести и установить самостоятельно. Ничего сложного здесь нет - открываете корпус или вытаскиваете рамки, прикручиваете диски на место и собираете конструкцию.

Единственное замечание здесь - желательно предварительно убедиться, что на винчестерах нет никакой информации и таблица разделов пуста. Иначе могут быть ошибки при инсталляции прошивки. Также не забываем, что все модели сетевых накопителей для своих внутренних дисков в обязательном порядке требуют переформатирования и просто установить существующие диски с сохранением данных не получится.

Установка прошивки

После этого обычно необходимо пройти этап установки встроенного программного обеспечения в NAS. Делается это с использованием комплектной утилиты, в нашем случае Synology Assistant. И прошивку, и программу лучше всего скачать с сайта производителя. Так вы будете уверены, что используются самые последние версии. Но можно и просто вставить в привод ПК комплектный оптический диск - вся нужная информация записана и на нем. Если накопитель поставлялся с винчестерами, то прошивка в нем уже стоит и этот этап можно пропустить.

Сетевые настройки

В большинстве случаев никаких специальных сетевых настроек на накопителе делать не требуется. Адреса он получает от роутера по DHCP, имя часто подходит предложенное производителем. Но при необходимости (например, если вам хочется указать новое имя или запретить доступ накопителя в интернет, удалив из параметров адрес маршрутизатора по умолчанию), можно воспользоваться страничкой «Панель управления - Сеть». Кроме того, здесь можно включить поддержку Jumbo Frames.

Выбор конфигурации дисков

После установки прошивки необходимо выбрать конфигурацию жестких дисков (в некоторых случаях она создается одновременно с установкой прошивки). Если их более одного, то можно выбрать один из вариантов RAID-массивов. Краткие сравнительные характеристики основных из них указаны в таблице. В формуле объема N - число дисков, S - объем одного из них (подразумевается, что диски одинаковые, в большинстве случаев это необходимо для оптимальной работы).

Режим Число дисков Общий объем Плюсы Минусы
Отдельные диски (Basic) 1 S Максимальная независимость Нет отказоустойчивости, нет возможности объединения дисков
JBOD 2 и более S×N Единый массив максимального объема
RAID0 2 и более S×N Максимальная скорость При отказе одного диска теряется вся информация
RAID1 2 S Малый полезный объем
RAID5 3 и более S×(N−1) Отказоустойчивость к потере одного диска Требуется 3 диска и более, невысокая скорость записи на слабых системах

Некоторые производители, в частности рассматриваемый здесь Synology, предоставляют собственные реализации RAID с упрощенной конфигурацией - когда для расширения массива достаточно только добавить диски или поменять его на более емкий.

Большинство моделей позволяют создавать сразу несколько массивов, а ограничением служит только число дисков. Например, если их четыре, то можно сделать из двух зеркало RAID1, а вторую пару собрать в RAID0.

Обратите внимание, что собственно прошивка устанавливается на каждый из дисков, это позволяет повысить отказоустойчивость и реализовать возможность по миграции и расширению массивов без потери данных методом последовательной замены дисков в RAID1/RAID5.

Кроме системного раздела, обычно есть и раздел подкачки, так что общий полезный пользователю объем получается несколько меньше. Но потеря 2-4 ГБ на дисках в 1 ТБ - не очень существенна.

Для форматирования винчестеров нужно сначала попасть в web-интерфейс устройства. Это можно сделать из Synology Assistant или просто открыв в браузере адрес/имя накопителя. После ввода имени и пароля вы получите доступ к настройкам.

Далее переходим к настройке дисковых томов. Если у вас один винчестер, то вариант тут тоже только один - «Basic», точнее есть еще «Synology Hybrid Raid», который автоматически выбирает наиболее удобную конфигурацию дисков и позволяет легко добавлять новые диски без потери информации. Для рассматриваемой двухдисковой модели он несколько избыточен. Так что если ставите два диска, то лучше выбрать классические JBOD - объединение двух дисков в один большой том, RAID0 - массив с чередованием для объединения в один том и увеличения производительности или RAID1 - два диска являются зеркальными копиями друг друга, обеспечивая отказоустойчивость к неисправности одного из них, правда полезный объем в этом случае равен одному диску. Иногда лучше даже просто сделать два независимых «Basic» тома, а для важных данных настроить автоматическое резервирование с одного диска на второй.

В последних версиях прошивок Synology появилась возможность деления каждого диска на несколько частей и организация массивов уже из них. Это существенно повышает гибкость конфигурации. Поскольку у других производителей такой возможности (пока?) нет, то сделаем все по старинке - один диск в один том.

На последнем шаге устройство предложит полностью просканировать массив на плохие блоки после создания. Несмотря на то, что современные винчестеры отличаются исключительной надежностью, лучше от этого не отказываться.

Создание общих ресурсов и определение прав

Следующим этапом после создания дискового тома будет программирование пользователей системы. Конечно, можно попробовать работать исключительно под аккаунтом администратора, но это не очень удобно. Второй крайностью будет разрешение гостевого доступа, так что никакой проверки проводиться не будет совсем. Но мы бы все-таки рекомендовали даже для дома и простой сети использовать «полную версию» - с именами и контролем доступа.

Самым удобным вариантом будет использование логинов и паролей, полностью совпадающих с учетными записями в Windows. Это исключит лишние запросы при обращении к сетевым ресурсам. Также будет полезным создать пользователей например для медиаплееров, так что им можно было выделить права «только чтение» на некоторые ресурсы чтобы избежать рисков потери данных. И не забудьте поменять пароль администратора сетевого накопителя.

Если пользователей много, можно также использовать организацию групп для более простого управления правами. Для дома это обычно избыточно.

Права пользователям выдаются не целиком на созданный дисковый том, а на общие папки, расположенные на нем. Так что и их тоже надо запрограммировать. В некоторых случаях они автоматически появляются после создания тома или включения некоторых сервисов (например медиаплеера).

В нашем случае мы сделаем папку public и назначим для нее права нашим пользователям.

Доступ к накопителю с ПК

После описанных выше операций, основной сценарий сетевого накопителя - чтение и запись файлов по сети - уже можно начинать использовать.

Вспомним немного практических особенностей сетей Windows. Основной современный сетевой протокол - TCP/IP - позволяет участникам только обмениваться пакетами. Так, для реализации различных сервисов поверх него нужно использовать протоколы более высокого уровня. Не вдаваясь в подробности - «Сеть»/«Сетевое окружение» в Windows, CIFS, SMB, SAMBA - все это означает возможность обмена файлами между сетевыми устройствами и сетевую печать. Реализация этого протокола возможна не только на Windows ПК, но и, например, медиаплеерах, телевизорах, спутниковых ресиверах, IP-видеокамерах и, конечно, других ОС, например Linux или Mac OS (аналогичный «стандартный/общий» протокол для этой ОС называется AFP). В большинстве случаев эти протоколы работают только в локальном сегменте вашей домашней сети.

Для доступа к ресурсу нужно знать имя сервера и имя общей папки на нем. В «Проводнике» Windows достаточно написать в строке адреса «\ServerFolder» - и вы попадаете в папку Folder, расположенную на сервере Server. В нашем случае нужно писать «\DiskStationpublic». Если ваше имя и пароль пользователя в Windows записаны в NAS и права на эту папку у вас есть (или включен гостевой доступ) - то вы увидите ее содержимое, если же нет - то сервер запросит имя и пароль. Обратите внимание, что в сети Windows на разные ресурсы одного сервера в один момент времени можно обращаться только с одним именем и паролем.

Часто удобно иметь постоянно подключенные локальные «буквы» для доступа к сетевым ресурсам. Это тоже сделать несложно - открываете в проводнике «\DiskStation», на иконке «public» нажимаете левую кнопку мышки и выбираете «Подключить». При наличии галочки в окне «Восстанавливать при входе в систему» - у вас всегда на выбранной букве будет доступ к этой общей папке (в случае, если накопитель, разумеется, включен). Кстати, для этой операции можно использовать и Synology Assistant.

Дополнительные настройки NAS

Коротко опишем, какие еще действия стоит предпринять после первого запуска сетевого накопителя.

Может так оказаться, что в вашей домашней сети используется имя рабочей группы, отличное от классического «WORKGROUP». Тогда желательно и у сетевого накопителя его изменить. Делается это в настройках протокола Windows - «Панель управления - Win/Mac/NFS». Если сетевой накопитель - единственное постоянно работающее устройство, то можно активировать на нем функцию «Local Master Browser», которая повысит стабильность работы сетевого окружения Windows. По имени или IP-адресу устройства можно найти всегда, но вот собственно их список в окне «Сеть» может иногда быть неполным.

Если планируется предоставлять доступ к NAS из сети Интернет, то желательно включить автоматическую блокировку при попытке подбора пароля. Это позволит вам не опасаться атак начинающих хакеров.

Также обязательно нужно включить доступ к web-интерфейсу по шифрованному протоколу HTTPS, причем желательно даже указать обязательность его использования. Делается это на вкладке «Панель управления - Настройки DSM».

Обратите внимание, что большинство современных браузеров при работе с HTTPS скорее всего будет «ругаться» на сетевой накопитель. Дело в том, что сертификат SSL, который он использует, является «самоподписанным», то есть проверить его происхождение через мировые центры сертификации невозможно. Обычно в этом случае браузер предложит вам включить данный сервер в список «доверенных» самостоятельно. Для работы в коммерческом сегменте вы можете инсталлировать в сетевой накопитель сертификат, официально полученный от доверенного центра.

Как и роутер, сетевой накопитель умеет отправлять сообщения по электронной почте в случае возникновения проблем. Использовать эту опцию можно со многими общедоступными почтовыми сервисами, которые поддерживают SMTP.

У большинства устройств есть опции по управлению питанием - например, отключению винчестеров в случае отсутствия активности или даже программирование расписания работы. Споры о том, какой режим работы - постоянный или с отключениями - более «полезен» для винчестера, не утихают до сих пор. Однозначного совета тут дать нельзя. Мы бы рекомендовали смотреть по ситуации - если накопитель используется более чем пару раз в сутки, лучше оставить диски включенными. В реальности современные диски очень надежные и если их не ронять во включенном состоянии, служат очень долго и по времени, и по циклам включения/выключения.

Кстати, для повышения надежности очень советуем подключать сетевой накопитель (да и другое оборудование тоже) через источник бесперебойного питания. Выбрать его модель можно по спискам совместимости NAS, тогда при соединении устройств по USB, ИБП сможет сообщить накопителю о проблемах и при необходимости безопасно выключить его.

Доступ к файлам из интернета

В качестве упражнения по совместному использованию роутера и NAS опишем один из вариантов организации полного и безопасного доступа к вашим файлам из сети Интернет.

У Synology есть для этого очень удобная возможность - встроенный файловый менеджер FileStation. Для него необходимо включить протокол HTTPS. Порт можно оставить по умолчанию 7001, но в случае, когда роутер не умеет работать с разными внешними и внутренними портами, лучше все-таки поменять на что-то менее «обычное».

Контроль прав пользователей у Synology касается и дополнительных сервисов, так что надо убедиться, что FileStation разрешен для нужных людей.

Следующие два действия проводится уже на роутере. Сначала мы назначаем на странице свойств сервера DHCP жесткую привязку MAC-адреса сетевого накопителя одному из IP-адресов диапазона локальной сети. Это позволит нам быть уверенными в том, что IP-адрес после перезагрузок не изменится.

Ну и последний штрих - назначение трансляции внешнего порта на FileStation. В нашем примере мы выбрали внешний порт 39456 и перевели его на внутренний 7001 на адрес 192.168.1.40 сетевого накопителя.

На этом настройка закончена. Теперь из любой точки интернета вы можете обратиться к своим файлам через браузер, набрав в строке адреса ссылку «https://myhost.homedns.org:39456» (адрес взят в качестве примера из прошлой статьи) и указав имя и пароль пользователя

В следующем материале мы рассмотрим работу с дополнительными сервисами сетевого накопителя.

Хранилище конфигурации в 1С 8.2 и 8.3 — это инструмент для групповой разработки решения, встроенный в платформу 1С: Предприятие 8. Хранилище позволяет вести многопользовательскую разработку решений неограниченным количеством пользователей. С его помощью можно увидеть полную историю разработки конфигурации и каждый шаг разработчиков в подробностях.

Рассмотрим настройки и работу с хранилищем конфигурации подробнее.

Хранилище, по сути, это база данных, где хранятся изменения конфигурации. Каждый из разработчиков работает со своей информационной базой, подключенной к хранилищу. Рабочая база так же может быть подключена к хранилищу. Лучше всего общая схема изображена на этой картинке:

Так же в этой БД хранится информации о том, кем захвачен тот и или иной объект. Захват объекта — это метка, устанавливаемая разработчиком. Установленный захват позволяет избежать коллизий при групповой разработке. Пока объект захвачен, никто не может его редактировать.

Захватить можно как объект целиком (рекурсивно), так и отдельно объект или формы.

После того как разработчик произвел какие-то действия над объектом, он обязан поместить доработки в хранилище. И тем самым снять пометку о том, что объект захвачен.

Как создать хранилище 1С

Создать хранилище достаточно просто, для этого необходимо выбрать в меню «Конфигурация — Хранилище конфигурации» пункт «Создать хранилище». В появившемся меню достаточно указать путь к будущему расположению хранилища и логин/пароль пользователя-администратора:

При создании сделайте обязательно резервную учетную запись с административными правами — очень часто это выручает.

Как подключиться к хранилищу 1С

Чтобы подключиться к хранилищу конфигурации, нужно выбрать в меню в меню «Конфигурация — Хранилище конфигурации» пункт «Подключиться к хранилищу». В появившемся окне необходимо указать путь к хранилищу и логин/пароль пользователя, нажать «Подключиться»:

Получите 267 видеоуроков по 1С бесплатно:

В момент подключения Ваша конфигурация заменится конфигурацией из хранилища, будьте внимательны.

Администрирование хранилища конфигурации 1С

Для администрирования хранилища 1С необходимо выбрать в меню конфигурации следующий пункт — «Конфигурация — Хранилище конфигурации — Администрирование»:

  • На вкладке «Пользователи» можно добавить или удалить новых пользователей, а также определить состав прав для каждого из них.
  • На вкладке «Подключения» можно просмотреть всех пользователей, подключившихся к хранилищу, по необходимости отключить их.
  • На вкладке «Отмена захвата» Вы можете снять захват любого пользователя на определенный объект, если конечно же Вы имеете права на это.

Как просмотреть историю хранилища 1С

Для просмотра истории надо зайти в меню «Конфигурация — Хранилище конфигурации», выбрать пункт «История хранилища»:

В истории хранилища 1С можно увидеть, когда, кем и что было изменено.

Разработка с хранилищем 1С 8.3

Работу с хранилищем условно можно разделить на основные действия:

  • конфигурации из хранилища конфигурации 1С;
  • обновить статусы хранилища 1С;
  • захват в хранилище;
  • помещение в хранилище.

Остановимся подробнее на каждом действии:

Обновить статусы хранилища 1С

Производит получение последних статусов объектов (захвачен или нет).

Вызывается: «Конфигурация — Хранилище конфигурации — Обновить статусы».

Обновление конфигурации из хранилища конфигурации 1С

Действие позволит получить все измененные объекты конфигурации, которые были помещены в хранилище. Выполнение данной команды так же обновляет статусы объектов.

Вызывается: «Конфигурация — Хранилище конфигурации — Обновить конфигурацию из хранилища».

Захват в хранилище конфигурации 1С

С помощью этой команды можно заблокировать изменение данного объекта для других разработчиков: пока объект захвачен Вами, никакой пользователь не может изменить его до тех пор, пока Вы не поместите объект обратно.

Произвести захват можно, вызвав правой кнопкой контекстное меню у объекта метаданных:

В открывшемся окне можно установить некоторые настройки:

  • Выполнять рекурсивно — позволяет захватить все подчиненные объекты — формы и т.д.
  • Разрешать получать захваченные — позволяет получать другим пользователям промежуточные версии объекта

Помещение в хранилище 1С

После изменения объекта его необходимо поместить обратно в хранилище, делается это так же, как захват, только выбирается пункт «Поместить в хранилище»:

При помещении обязательно заполняйте поле «комментарий», это очень важно при групповой разработке. Через полгода Вы и не вспомните, зачем производили те или иные действия. Так же, как у захвата, у помещения есть свои специфичные настройки:

  • Выполнять рекурсивно — позволяет поместить все подчиненные объекты — формы и т.д.
  • Оставить захваченными — позволяет поместить «промежуточную» версию объекта, оставив при этом захват пользователем

Как добавить новый объект в хранилище 1С