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

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

Выберите внутреннее или внешнее хранилище

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

Внутреннее хранилище:

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

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

Внешнее хранилище:

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

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

Получите разрешения для внешних накопителей

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

...

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

...

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

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

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

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

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

Чтобы создать новый файл в одном из этих каталогов, вы можете использовать File() конструктор, передав File предоставленный одним из выше указанных методов, который указывает на ваш внутренний каталог. Например:

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(); }

Или, если вам нужно кэшировать некоторые файлы, то следует использовать 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) { // Error while creating file } return file; }

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

Сохраните файл на внешнем накопителе

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

/* Checks if external storage is available for read and write */ public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; } /* Checks if external storage is available to at least read */ public boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return true; } return false; }

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

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

Например, фотографии, сделанные с помощью приложения, или другие загруженные файлы.

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

Например, дополнительные ресурсы загруженные вашим приложения или временные медиа-файлы.

Если вы хотите сохранить общедоступные файлы на внешнем устройстве хранения, используйте метод для получения File представляющего соответствующий каталог на внешнем накопителе. Метод принимает аргумент, указывающий тип файла, который вы хотите сохранить, чтобы они могли быть логически организованы с другими общедоступными файлами, такими как DIRECTORY_MUSIC или DIRECTORY_PICTURES . Например:

Public File getAlbumStorageDir(String albumName) { // Get the directory for the user"s public pictures directory. 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) { // Get the directory for the app"s private pictures directory. File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) { Log.e(LOG_TAG, "Directory not created"); } return file; }

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

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

Запросите свободное пространство

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

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

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

Удаление файла

Вы всегда должны удалить файлы, которые вам больше не нужны. Самый простой способ удалить файл это вызвать delete() .

MyFile.delete();

Если файл сохранен во внутреннем хранилище, вы также можете попросить Context найти и удалить файл, вызвав deleteFile() :

MyContext.deleteFile(fileName);

Примечание: Когда пользователь удаляет ваше приложение, Android система удаляет следующее:

  • Все файлы, сохраненные во внутреннем хранилище
  • Все файлы, сохраненные на внешнем накопителе, используя getExternalFilesDir() .

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

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

Android предлагает различные способы для реализации этого; вы можете использовать общие настройки приложения, маленькую базу данных SQLite и т. д. У всех этих возможностей есть общая черта – они не обрабатывают большие двоичные файлы. Для чего нам это может понадобиться? Хотя мы можем указать системе, чтобы она устанавливала приложение во внешнее хранилище (и таким образом не тратить память внутреннего хранилища), это будет работать только в версиях Android начиная с 2.2. В более старых версиях ОС все данные приложения будут храниться во внутренней памяти устройства. Теоретически мы могли бы включить код нашего приложения в АРК-файл и загружать все ресурсы с сервера на карту памяти SD при первом запуске программы. Многие известные игры для Android так и делают.

Существуют и другие сценарии, в которых нам необходим доступ к карте памяти (которая, в общем-то, является синонимом термина внешнее хранилище для современных устройств). Мы могли бы позволить нашим пользователям создавать собственные уровни во внутреннем редакторе. После создания нам будет необходимо их где-то хранить, и SD-карта прекрасно для этого подходит. Итак, мы не будем использовать необычные механизмы, предлагаемые Android для хранения настроек приложения, и рассмотрим вместо этого механизм реализации чтения и записи файлов на карте SD.

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

Далее нужно проверить, доступно ли нам в данный момент внешнее хранилище. Например, при работе с AVD у вас есть возможность обойтись без эмулирования наличия карты памяти – тогда приложение ничего не сможет туда записывать. Другая причина не получать доступ к SD-карте – его занятость другим процессом (например, просмотра его пользователем через USB). Вот так мы проверяем состояние карты памяти;

В результате мы получаем строку. Класс Environment определяет набор констант, одна из которых называется Environment. MEDI AMOUNTED (ее значение – тоже строка). Если вышеуказанный метод возвращает именно эту константу, это значит, что мы имеем полный доступ (чтение и запись) к внешнему хранилищу. Обратите внимание – на самом деле вам необходимо использовать метод equals для сравнения двух строк; оператор равенства в таких случаях не всегда дает верные результаты.

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

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

Листинг 4.8. Активность ExternalStorageTest package com.bad.ogi с.androi dgames;

Сначала мы проверяем физическую доступность SD-карты (если проверка не удалась, на этом все и заканчивается). Далее получаем корневой каталог хранилища и создаем новый экземпляр объекта File, указывающий на файл, который мы создадим в следующем выражении. Метод writeTextFi 1е использует стандартные Java-классы ввода-вывода для реализации наших целей. Если файл еще не существует, метод создаст его; в ином случае он перепишет существующий. После успешной записи текста в файл на карте мы вновь его считываем оттуда и устанавливаем в качестве содержимого TextVi ew. Финальный шаг – удаление файла из внешнего хранилища. Все действия совершаются с соблюдением необходимых мер предосторожности, благодаря которым сообщения о проблемах также выводятся в TextView. Рисунок 4.11 демонстрирует вывод активности.

Из этого урока необходимо извлечь следующие моменты.

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

Всегда проверяйте доступность внешнего хранилища.

Не связывайтесь со служебными файлами во внешнем хранилище. Я серьезно.

Рис. 4.11. Послание от веселого Роджера

Увидев, как легко удалить все файлы из внешнего хранилища, вы должны подумать дважды, создавая и размещая на Android Market приложение, запрашивающее доступ к карте SD, – ведь после инсталляции оно будет иметь полный доступ ко всем файлам.

Обработка звука

Android предлагает простые в применении API для воспроизведения звуковых эффектов и музыкальных файлов – как раз то, что нам нужно для написания игры. Рассмотрим их.

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

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

Он позволит вам иметь постоянный доступ с любого ПК или плеера ко всей медиабиблиотеке, хранить резервные копии документов и системных разделов компьютеров, обмениваться файлами через интернет без участия ПК и многое другое. Кроме того, эти устройства отличает небольшой (по сравнению с ПК) размер и низкий уровень энергопотребления и шума. Так что если у вас не коттедж с парой подсобных помещений, то компактный сетевой накопитель может быть очень удачным выбором. Кстати, есть даже модели для 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» (адрес взят в качестве примера из прошлой статьи) и указав имя и пароль пользователя

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