Сколько хранится информация на облаке Майл.Ру?
Главная » Mail диск
Сколько хранится информация на облаке Майл, что будет с данными, если долго не заходить на сервер. Вопрос довольно спорный и вызывает много неправильных статей в сети. Настоятельно рекомендуется ознакамливаться с правилами применения сервиса только на его официальном сайте. Удалённое размещение майл ру не стало при этом исключение.
В раздел «Справка» по пунктам расписано каждое условие работы. Ниже предоставляются ответы на самые частые задаваемые вопросы пользователями. Если времени читать большой объём текста нет, ниже будут приведены выдержки, позволяющие быстро получить ответа на этот вопрос.
Сроки хранения данных в размещение
Есть правила применения следующих видов данных:
- файлы;
- фото;
- данные другого типа.
Каждый выгружаемый на сервер объект при платной и бесплатно подписке подчиняется установленным модератором ресурса правила использования. Это касается всех архивов, которую публикуют в своём обычном портале люди.
Для удобства выкладки и публикации документов или фото есть функция открыть доступ к своим файлам и создавать на них прямые ссылки. Это позволит применять место не только для развлечений, но и для работы и бизнеса.
Согласно правилам использования предоставляемого компанией Маил Ру облачного ресурса весь выделенный объём бессрочный. Это означает, что использовать 100 гигабайт человек может без ограничения по времени.
Существуют ли ограничения по срокам
Есть и прямо установленные ограничения. Он отмечаются в правилах использования облачного ресурса. Заблокировать доступ ли удалить контент модераторы могут по следующим причинам:
- Человек выложил в открытый доступ информацию интимного характера.
- Опубликована личная переписка без разрешения её авторов.
- Опубликованы материалы, направленные на разжигание личностной неприязни или оскорбляющие чувства определённой группы людей.
- Выложены файлы, содержащие вредоносны код или вирус для получения несанкционированного доступа системам пользователей.
В перечисленных случаях этот контент будет заблокирована или полностью удалена с ресурса. Стоит отметить, что под эти правила попадают файлы, выкладываемые в общий доступ пользователем.
Важно! Для блокировки все файлы должны быть открыты пользователям сет интернет. На них устанавливаться внешние ссылки для перехода
Срок хранения напрямую зависит от срока действия аккаунта. Если человек не заходит год на удалённое хранилище своего архива удаления не будет. При регистрации почтового ящика все клиенты компании Mail получают в подарок удалённое размещение на 100 гигабайт.
Они могу бессрочно пользоваться местом. Компания по условиям использования онлайн ресурса не имеет право удалять файлы, кроме прямо указанных в правилах случаев.
Рейтинг
( 2 оценки, среднее 4.5 из 5 )
4
Понравилась статья? Поделиться с друзьями:
Сколько хранятся удаленные фото в облаке
Статьи › Яндекс › Если удалить фото с телефона останется ли оно в Яндекс Диске
Если на устройстве включена автозагрузка и синхронизация, удаленные вами фотографии и видео хранятся в корзине в течение 60 дней, после чего удаляются без возможности восстановления. Подробнее о том, как включить автозагрузку и синхронизацию… Совет.
- Удаленные фотографии и видео на устройстве хранятся в корзине на протяжении 60 дней.
- Фото и видео в облаке iCloud хранятся в альбоме «Недавно удаленные» в течение 30 дней.
- Если вы удалили фото или видео из iCloud на одном устройстве, они удаляются на всех других устройствах.
- Фото и видео могут быть восстановлены из корзины в приложении Google на устройствах Android.
- Фото и видео в альбоме «Недавно удаленные» на айфоне будут удалены после 30 дней.
- Удаленные фото и видео на айфоне сохраняются в альбоме «Недавно удаленные».
- Файлы, удаленные из iCloud Drive или приложений iWork, могут быть восстановлены на iCloud.com.
- Чтобы навсегда удалить фото с айфона, выберите их и нажмите кнопку удаления.
- Фото и видео могут быть восстановлены из корзины в приложении Google Фото на устройствах Android.
- Сколько хранятся удаленные Фото в Айклауде
- Можно ли восстановить удаленные Фото в облаке
- Сколько хранятся Фото в облаке айфон
- Куда исчезают Фото из недавно удаленных
- Можно ли восстановить давно удаленные Фото на айфоне
- Как навсегда удалить Фото с айфона
- Как восстановить навсегда удаленные фото с телефона
- Где хранятся удаленные фото с телефона
- Как достать все фото из iCloud
- Как посмотреть старые фотографии в облаке
- Как долго хранятся данные в iCloud
- Что будет если удалить все Фото из iCloud
- Как найти старые фото в облаке айфон
- Куда пропадают фотки
- Почему не все фото в iCloud
- Можно ли удалить фото с телефона если они в облаке
- Сколько хранится резервная копия в Айклауде
- Какие фото хранятся в Айклауде
- Как найти свои фото в гугл облаке
- Как восстановить файлы которые были удалены безвозвратно
- Как восстановить фото в гугл диске Если удалены из корзины
- Где безопаснее всего хранить Фото
- Что сохраняется в облаке
- Что хранится в облаке
- Сколько хранятся файлы в Айклауде
- Сколько хранятся фотки в недавно удаленных
- Как посмотреть все удаленные Фото в Айклауде
Сколько хранятся удаленные Фото в Айклауде
Когда вы удаляете фотографию и видео, они в течение 30 дней хранятся в альбоме «Недавно удаленные». Через 30 дней они будут удалены без возможности восстановления. Если при использовании службы «Фото iCloud» удалить фотографию или видео на одном устройстве, они также удаляются на всех других устройствах.
Можно ли восстановить удаленные Фото в облаке
Шаг 1: Откройте приложение Google на своем телефоне или планшете Android. Шаг 2: Нажмите «Меню» слева и нажмите «Корзина». Шаг 3: Теперь выберите те фотографии, которые вы хотите восстановить. Шаг 4: Щелкните вкладку «Восстановить», расположенную внизу.
Сколько хранятся Фото в облаке айфон
Удаленные фотографии и видеозаписи помещаются в альбом «Недавно удаленные», где они остаются в течение 30 дней. После этого объекты будут окончательно удалены со всех ваших устройств, на которых настроена функция «Фото iCloud».
Куда исчезают Фото из недавно удаленных
Если вы случайно удалили фотографию или видео, они будут перемещены в альбом «Недавно удаленные». Перейдите в раздел «Фото» > «Альбомы» и нажмите «Недавно удаленные» в разделе «Утилиты».
Можно ли восстановить давно удаленные Фото на айфоне
Восстановление файлов, удаленных из iCloud Drive или приложений iWork. В iCloud Drive на сайте iCloud.com нажмите «Недавно удаленные» на боковой панели. Нажмите «Восстановить все» или выберите отдельные файлы, которые необходимо восстановить, затем нажмите кнопку «Восстановить».
Как навсегда удалить Фото с айфона
Просто нажмите Command + A, чтобы выбрать фотографии, а затем — кнопку удаления. Как и в приложении «Фото» на iPhone, ваши фотографии не будут сразу же удалены навсегда — они переместятся в папку «Недавно удаленные». Перейдите в эту папку, выберите все фотографии и навсегда удалите их.
Как восстановить навсегда удаленные фото с телефона
Как восстановить фотографии и видео:
- Откройте приложение «Google Фото» на телефоне или планшете Android.
- В нижней части экрана нажмите «Библиотека» Корзина.
- Нажмите и удерживайте объект, который хотите восстановить.
- В нижней части экрана нажмите Восстановить. Фото или видео снова появится:
Где хранятся удаленные фото с телефона
На iPhone, iPad или iPod touch:
- На сайте iCloud.com нажмите «Фото».
- Нажмите «Выбрать» и выберите фотографию или видео. Можно выбрать несколько фотографий или видео.
- Нажмите кнопку дополнительных параметров.
- Выберите «Загрузить», а затем нажмите «Загрузить» для подтверждения.
Как посмотреть старые фотографии в облаке
Если вы включили копирование в облако, резервные копии фотографий и видео хранятся в Google Фото.Фотографии могут находиться в других папках на устройстве:
- Откройте приложение «Google Фото» на телефоне или планшете Android.
- В нижней части экрана нажмите Библиотека.
- Посмотрите папки в разделе «Фото на устройстве».
Как долго хранятся данные в iCloud
Согласно положениям пользовательского соглашения, последняя резервная копия хранится в iCloud в течение 180 дней.
Что будет если удалить все Фото из iCloud
Когда вы удаляете фотографию или видеозапись в приложении «Фото» на сайте iCloud.com, это изменение отражается на всех устройствах, где включена функция «Фото iCloud». Если вы передумаете, у вас будет возможность восстановить фотографию или видеозапись в течение 30 дней, после чего она будет удалена окончательно.
Как найти старые фото в облаке айфон
Как восстановить фото из iCloud:
- Войдите в свою учётную запись Apple ID и выберите нужные фото;
- Отметьте их галочками и нажмите «Восстановить».
Куда пропадают фотки
Все удаленные фото на Android в течение некоторого времени хранятся в папке Корзина в Галерее. Время хранения удаленных фото обычно составляет 30 календарных дней. Если вы фото на смартфоне пропали недавно, попробуйте найти их здесь: Откройте приложение Галерея на своем смартфоне.
Почему не все фото в iCloud
Почему не загружаются фото в айклауд? Возможно, они загружаются только при соединении c Wi-Fi. Сделайте так, чтобы выгрузка работала и при обычном сотовом подключении: настройки — сотовые данные — фото. кончилось место в хранилище iCloud.
Можно ли удалить фото с телефона если они в облаке
Зайдите в облако Google Фото. Воспользуйтесь функцией «Освободить место». В таком случаи ваши файлы останутся в облаке, но будут удалены из памяти устройства.
Сколько хранится резервная копия в Айклауде
Если отключить функцию резервного копирования в iCloud для устройства, все резервные копии, хранящиеся в iCloud, будут оставаться там в течение 180 дней, после чего будут удалены. Для резервного копирования данных устройства можно также использовать компьютер.
Какие фото хранятся в Айклауде
Функция «Фото iCloud» хранит все ваши фотографии и видео в исходной версии с высоким разрешением. Для экономии места в памяти устройства можно включить функцию «Оптимизация хранилища». Если включена функция «Оптимизация хранилища», функция «Фото iCloud» автоматически регулирует размер медиатеки на устройстве.
Как найти свои фото в гугл облаке
Если вы включили копирование в облако, резервные копии фотографий и видео хранятся в Google Фото.Увидеть их можно только на телефоне:
- Откройте приложение «Google Фото» на мобильном устройстве.
- В нижней части экрана нажмите Библиотека Альбомы.
- Посмотрите папки в разделе «Фото на устройстве».
Как восстановить файлы которые были удалены безвозвратно
Щелкните правой кнопкой мыши по новому файлу и выберите «Восстановить прежнюю версию». Windows найдёт и перечислит предыдущие версии файлов или папок с этим именем вместе с их связанными датами. 3. Выберите последнюю и нажмите «Восстановить», что отменит удаление и вернёт ваши навсегда удаленные файл или папку.
Как восстановить фото в гугл диске Если удалены из корзины
Файлы, помещенные в корзину, автоматически удаляются через 30 дней Восстановить файлы из корзины можно в течение 30 дней. Как восстановить удаленные файлы:
- На компьютере откройте страницу drive.google.com/drive/trash.
- Нажмите правой кнопкой мыши на нужный файл.
- Выберите Восстановить.
Где безопаснее всего хранить Фото
7 лучших сервисов для хранения ваших фото в облаке:
- Google Фото Google LLC.
- Google Фото Google LLC.
- Dropbox: Облачное хранилище Dropbox, Inc.
- Dropbox: Облачное хранилище Dropbox, Inc.
- Microsoft OneDrive. Microsoft Corporation.
- Microsoft OneDrive.
- Adobe Lightroom — Фоторедактор
- Adobe Lightroom Фото редактор
Что сохраняется в облаке
Облачное хранилище позволяет сохранять фотографии и файлы в Интернете, а затем работать с ними либо предоставлять к ним общий доступ со своего телефона, планшета или компьютера. В дополнение к удобному доступу с любого устройства и в любое время ваши файлы будут защищены от вредоносных программ и случайной потери.
Что хранится в облаке
Сейчас облачное хранилище данных — это удобный способ хранить любую информацию: как личные файлы, так и петабайты данных компании. Места на дисках у провайдера много, клиентов — тоже. Это позволяет распределять спрос и предложение на услугу между всеми клиентами.
Сколько хранятся файлы в Айклауде
Согласно положениям пользовательского соглашения, последняя резервная копия хранится в iCloud в течение 180 дней. А точкой отсчёта для облака является отключение функции резервного копирования. То есть, если вы ничего не тронете, копии будут сохраняться и дальше, подменяя друг друга на постоянной основе.
Сколько хранятся фотки в недавно удаленных
Что происходит с удаленными файлами
Фотографии и видео, которые вы загрузили в Google Фото, а затем удалили, будут храниться в корзине в течение 60 дней. Если вы удалите с устройства под управлением Android 11 и более поздней версии объект, который не загружен в Google Фото, он останется в корзине в течение 30 дней.
Как посмотреть все удаленные Фото в Айклауде
Вам нужно открыть www.icloud.com на компьютере и перейти в раздел«Недавно удаленные», чтобы найти удаленные фотографии. Они будут храниться там в течение 40 дней после удаления. Выберите нужные вам и нажмите «Восстановить», чтобы восстановить их в медиатеке фотографий iCloud.
Как Mail.Ru сократила объем хранилища электронной почты с 50 до 32 ПБ — Smashing Magazine
- 16 минут чтения
- Оптимизация, Электронная почта
- Поделиться в Twitter, LinkedIn
Об авторе
Технический директор службы почты и портала Mail.ru. Больше о Андрей ↬
Когда два года назад курс российского рубля резко упал, мы задумались о сокращении расходов на оборудование и хостинг почтового сервиса Mail.Ru. Во-первых, нам нужно было посмотреть, из чего состоит электронная почта.0015 . На индексы и тела приходится только 15% объема хранилища, тогда как 85% занимают файлы. Итак, оптимизацию файлов (то есть вложений) стоит изучить подробнее. В то время у нас не было дедупликации файлов, но мы подсчитали, что это может уменьшить общий размер хранилища на 36%, потому что многие пользователи получают одни и те же сообщения, такие как прайс-листы из интернет-магазинов и информационные бюллетени из социальных сетей, которые содержать изображения и так далее. В этой статье я опишу, как мы внедрили систему дедупликации под руководством PSIAlt.На индексы и тела приходится только 15 % объема хранилища, тогда как 85 % занимают файлы. Итак, оптимизацию файлов (то есть вложений) стоит изучить подробнее. В то время у нас не было дедупликации файлов, но мы подсчитали, что это может уменьшить общий размер хранилища на 36%, потому что многие пользователи получают одни и те же сообщения, такие как прайс-листы из интернет-магазинов и информационные бюллетени из социальных сетей, которые содержать изображения и так далее. В этой статье я опишу, как мы внедрили систему дедупликации под руководством PSIAlt.
Дополнительная литература на SmashingMag:
- Как улучшить рабочий процесс электронной почты с помощью модульного дизайна
- Упрощение кодирования электронной почты с адаптивным HTML с помощью MJML
- Шаблоны электронной почты для веб-дизайнеров и разработчиков
- Дизайн для электронной почты (электронная книга) 90 028
Хранилище метаданных
Мы имеем дело с потоком файлов. Когда мы получаем сообщение, мы должны доставить его пользователю как можно скорее. Нам нужно уметь быстро распознавать дубликаты. Простым решением было бы назвать файлы на основе их содержимого. Мы используем SHA-1 для этой цели. Исходное имя файла хранится в самом письме, поэтому нам не нужно об этом беспокоиться.
Как только приходит новое электронное письмо, мы извлекаем файлы, вычисляем их хэши и добавляем результат в электронное письмо. Это необходимый шаг, чтобы иметь возможность легко найти файлы, принадлежащие определенному электронному письму, в нашем будущем хранилище, когда это электронное письмо будет отправлено.
Теперь давайте загрузим файл в наше хранилище и выясним, существует ли там уже другой файл с таким же хэшем. Это означает, что нам нужно хранить все хэши в памяти. Назовем это хранилище хэшей FileDB.
Один и тот же файл может быть прикреплен к разным электронным письмам, поэтому нам понадобится счетчик, который отслеживает все электронные письма, содержащие этот файл.
Счетчик увеличивается с каждым новым загружаемым файлом. Около 40% всех файлов удаляются, поэтому, если пользователь удаляет электронное письмо, содержащее файлы, загруженные в облако, счетчик должен быть уменьшен. Если счетчик достигает нуля, файл можно удалить.
Здесь мы сталкиваемся с первой проблемой: информация об электронном письме (индексы) хранится в одной системе, а информация о файле — в другой. Это может привести к ошибке. Например, рассмотрим следующий рабочий процесс:
- Система получает запрос на удаление электронной почты.
- Система проверяет индексы электронной почты.
- Система видит наличие вложения (SHA-1).
- Система отправляет запрос на удаление файла.
- Произошел сбой, поэтому письмо не удаляется.
В этом случае письмо остается в системе, но счетчик уменьшается на 1. Когда система получает второй запрос на удаление этого письма, счетчик снова уменьшается — и мы можем столкнуться с ситуацией, когда файл все еще прикреплен к электронному письму, но счетчик уже на 0,
Очень важно не потерять данные. У нас не может быть ситуации, когда пользователь открывает электронное письмо и не обнаруживает там вложений. При этом хранение некоторых избыточных файлов на дисках не имеет большого значения. Все, что нам нужно, — это механизм, позволяющий однозначно определить, правильно ли счетчик установлен на 0. Поэтому у нас есть еще одно поле — magic
.
Алгоритм прост. Вместе с хэшем файла мы храним в электронном письме случайно сгенерированное число. Все запросы на загрузку или удаление файла учитывают это случайное число: В случае запроса на загрузку это число добавляется к текущему значению магического числа; если это запрос на удаление, это случайное число вычитается из текущего значения магического числа.
Таким образом, если все письма увеличивали и уменьшали счетчик нужное количество раз, то магическое число также будет равно 0. В противном случае файл удалять нельзя.
Рассмотрим пример. У нас есть файл с именем sha1
. Он загружается один раз, и письмо генерирует для него случайное (магическое) число, равное 345.
Затем приходит новое письмо с тем же файлом. Он генерирует собственное магическое число (123) и загружает файл. Новое магическое число добавляется к текущему значению магического числа (345), а счетчик увеличивается на 1. В результате в FileDB мы имеем магическое число со значением 468 и счетчиком, установленным на 2.
После того, как пользователь удалит второе письмо, магическое число, сгенерированное для этого письма, вычитается из текущего значения магического числа (468), а счетчик уменьшается на 1.
Давайте сначала посмотрим на нормальный ход событий . Пользователь удаляет первое электронное письмо, и магическое число и счетчик становятся равными 0. Это означает, что данные непротиворечивы и файл можно удалить.
Теперь предположим, что что-то пойдет не так: второе письмо отправляет два запроса на удаление. Значение счетчика, равное 0, означает, что ссылок на файл больше нет, но магическое число, равное 222, сигнализирует о проблеме: файл нельзя удалить, пока данные не будут согласованы.
Давайте еще немного разовьем ситуацию. Предположим, что первое электронное письмо также было удалено. В этом случае магическое число (-123) по-прежнему сигнализирует о несоответствии.
В качестве меры предосторожности, когда счетчик достигает 0, а магическое число нет (в нашем случае магическое число равно 222, а счетчик равен 0), файлу присваивается флаг «Не удалять». Таким образом, даже если — после серии удалений и загрузок — и магическое число, и счетчик каким-то образом станут 0, мы все равно будем знать, что этот файл проблемный и его нельзя удалять. Системе не разрешено генерировать магический одноранговый узел 0. Если вы отправите 0 в качестве магического числа, вы получите сообщение об ошибке.
Назад к FileDB. Каждая сущность имеет набор флагов. Планируете ли вы их использовать или нет, они вам понадобятся (если, скажем, файл нужно пометить как неудаляемый).
У нас есть все атрибуты файла, кроме того, где файл находится физически. Это место определяется сервером (IP) и диском. Таких серверов и два таких диска должно быть два. Мы храним две копии каждого файла.
Но на одном диске хранится очень много файлов (в нашем случае около 1 млн), а значит эти записи будут идентифицироваться одной и той же парой дисков в FileDB, поэтому хранить эту информацию в FileDB было бы расточительно. Давайте поместим его в отдельную таблицу PairDB, связанную с FileDB через идентификатор пары дисков.
Думаю, само собой разумеется, что помимо ID пары дисков нам также понадобится поле flags
. Забегая немного вперед, упомяну, что это поле сигнализирует о том, заблокированы ли диски (скажем, один диск вышел из строя, а другой копируется, поэтому ни на один из них нельзя записать новые данные).
Также нам нужно знать, сколько свободного места есть на каждом диске — отсюда и соответствующие поля.
Чтобы все работало быстро, FileDB и PairDB должны быть резидентными в оперативной памяти. Раньше мы использовали Tarantool 1.5, теперь нужно использовать последнюю версию. FileDB имеет пять полей (длиной 20, 4, 4, 4 и 4 байта), что в сумме дает 36 байтов. Кроме того, каждая запись имеет 16-байтовый заголовок, а также 1-байтовый указатель длины на поле, в результате чего общий размер записи составляет 57 байт. 93) = 179 ГБ
Всего нужно 800 ГБ оперативной памяти. И давайте не будем забывать о репликации, которая удваивает объем требуемой оперативной памяти.
Если мы купим машины с 256 ГБ ОЗУ на борту, нам понадобится восемь из них.
Мы можем оценить размер PairDB. Средний размер файла составляет 1 МБ, а емкость диска — 1 ТБ, что позволяет хранить около 1 миллиона файлов на одном диске; Итак, нам потребуется около 28 000 дисков. Одна запись PairDB описывает два диска. Таким образом, PairDB содержит 14 000 записей — ничтожно мало по сравнению с FileDB.
Загрузка файла
Теперь, когда мы разобрались со структурой базы данных, давайте обратимся к API для взаимодействия с системой. На первый взгляд, нам нужны методы upload
и delete
. Но не забывайте о дедупликации: велика вероятность, что файл, который мы пытаемся загрузить, уже находится в хранилище, и загружать его второй раз не имеет смысла. Итак, необходимы следующие методы:
-
inc(sha1, magic)
увеличивает счетчик. Если файл не существует, он возвращает ошибку. Напомним, что нам также понадобится магическое число, которое поможет предотвратить некорректное удаление файла. -
upload(sha1, magic)
следует вызывать, еслиinc
вернул ошибку, что означает, что этот файл не существует и должен быть загружен. -
dec(sha1, magic)
следует вызывать, если пользователь удаляет электронное письмо. Счетчик сначала уменьшается. -
GET /sha1
загружает файл по HTTP.
Давайте подробнее рассмотрим, что происходит во время загрузки. Для демона, реализующего этот интерфейс, мы выбрали протокол IProto. Демоны должны хорошо масштабироваться для любого количества машин, поэтому они не сохраняют состояния. Предположим, мы получаем запрос через сокет:
Имя команды сообщает нам длину заголовка, поэтому мы сначала читаем заголовок. Теперь нам нужно узнать длину файла origin-len
. Для его загрузки необходимо выбрать пару серверов. Мы просто извлекаем все записи (несколько тысяч) из PairDB и используем стандартный алгоритм для поиска нужной пары: Берем отрезок длиной, равной сумме свободных мест на всех парах, случайным образом выбираем точку на этом отрезке, и выберите любую пару, которой принадлежит эта точка.
Однако выбирать пару таким образом рискованно. Предположим, что все наши диски заполнены на 90% — и тогда мы добавляем новый пустой диск. С большой долей вероятности все новые файлы будут загружаться на этот диск. Чтобы избежать этой проблемы, мы должны суммировать не свободное пространство пары дисков, а n-й корень этого свободного места.
Итак, мы выбрали пару, но наш демон потоковый, и если мы начинаем заливать файл в хранилище, обратного пути нет. При этом перед загрузкой реального файла мы сначала загрузим небольшой тестовый файл. Если тестовая загрузка прошла успешно, мы будем читать filecontent
из сокета и загрузить его в хранилище; в противном случае выбирается другая пара. Хэш SHA-1 можно прочитать на лету, поэтому он также проверяется при загрузке.
Теперь рассмотрим загрузку файла из загрузчика на выбранную пару дисков. На машинах с дисками настраиваем nginx и используем протокол WebDAV. Приходит электронное письмо. В FileDB этого файла пока нет, поэтому его нужно залить на пару дисков через загрузчик.
Но ничто не мешает другому пользователю получить такое же письмо — допустим, указаны два получателя. Помните, что FileDB еще не имеет этого файла, поэтому еще один загрузчик будет загружать этот самый файл и может выбрать ту же пару дисков для загрузки.
Nginx, скорее всего, решит эту ситуацию правильно, но нам нужно контролировать весь процесс, поэтому мы сохраним файл со сложным именем.
Часть имени, выделенная красным цветом, — это место, где каждый загрузчик помещает случайное число. Таким образом, два метода PUT
не будут перекрываться и загружать два разных файла. Как только nginx отвечает 201
(ОК), первый загрузчик выполняет атомарную операцию MOVE
, которая указывает окончательное имя файла.
Когда второй загрузчик завершит загрузку файла и также выполнит MOVE
, файл перезапишется, но ничего страшного, ведь файл один и тот же. Как только файл окажется на дисках, необходимо добавить новую запись в FileDB. Наша версия Tarantool разделена на два пространства. До сих пор мы использовали только space0
.
Однако вместо простого добавления новой записи в FileDB мы используем хранимую процедуру, которая либо увеличивает счетчик файлов, либо добавляет новую запись в FileDB. Почему? За то время, которое прошло с тех пор, как загрузчик убедился, что файл не существует в FileDB, загрузил его и приступил к добавлению новой записи в FileDB, кто-то другой мог загрузить этот файл и добавить соответствующую запись. Мы рассмотрели именно такой случай: на одно письмо указываются два получателя, поэтому загружать файл начинают два загрузчика; как только второй загрузчик завершает загрузку, он также добавляет новую запись в FileDB.
В этом случае второй загрузчик просто увеличивает счетчик файлов.
Теперь рассмотрим метод dec
. У нашей системы есть две первоочередные задачи: надежно записать файл на диск и быстро отдать его клиенту с этого диска. Физическое удаление файла создает определенную нагрузку и замедляет выполнение этих двух задач. Вот почему мы выполняем удаление в автономном режиме. Сам метод dec
уменьшает значение счетчика. Если последнее становится равным 0, как и магическое число, то это означает, что файл больше никому не нужен, поэтому мы перемещаем соответствующую запись из пробел 0
в пробел 1
в Tarantool.
декремент (sha1, магия) { прилавок-- current_magic –= магия если (счетчик == 0 && current_magic == 0){ двигаться (ша1, пробел1) } }
Valkyrie
В каждом хранилище есть демон Valkyrie, который следит за целостностью и согласованностью данных и работает с space1
. На каждый диск приходится один экземпляр демона. Демон выполняет итерацию по всем файлам на диске и проверяет наличие пробела1 9.0063 содержит запись, соответствующую конкретному файлу, что означало бы, что этот файл следует удалить.
Но после вызова метода dec
и перемещения файла по адресу space1
Valkyrie может потребоваться некоторое время, чтобы найти этот файл. Это означает, что за время между этими двумя событиями файл может быть перезалит и, таким образом, снова перемещен на space0
.
Вот почему Valkyrie также проверяет, существует ли файл в space0
. Если это так и pair_id
соответствующей записи указывает на пару дисков, на которых работает данный экземпляр Valkyrie, то запись удаляется из space1
.
Если в space0
не найдено ни одной записи, то файл является потенциальным кандидатом на удаление. Однако между запросом к space0
и физическим удалением файла все еще есть временное окно, в котором новая запись, соответствующая этому файлу, может появиться в space0
. Чтобы справиться с этим, мы помещаем файл в карантин.
Вместо удаления файла мы добавляем к его имени удалено
и метку времени. Это означает, что мы физически удалим файл с временной меткой
плюс некоторое время, указанное в файле конфигурации. Если произойдет сбой и файл будет удален по ошибке, пользователь придет, чтобы вернуть его. Мы сможем восстановить его и решить проблему без потери данных.
Теперь вспомним, что есть два диска, на каждом из которых работает экземпляр Valkyrie. Два экземпляра не синхронизированы. Отсюда вопрос: Когда запись должна быть удалена с пробел1
?
Мы сделаем две вещи. Во-первых, для рассматриваемого файла давайте сделаем один из экземпляров Valkyrie мастером. Это легко сделать, используя первый бит имени файла: если он равен нулю, то disk0
является мастером; в противном случае disk1
является ведущим.
Введем задержку обработки. Напомним, что когда запись находится в space0
, она содержит поле magic
для проверки согласованности. Когда запись перемещается на space1
, это поле не используется, поэтому поставим туда временную метку, соответствующую времени появления этой записи в space1
. Таким образом, главный инстанс Valkyrie начнет обрабатывать записи в space1
сразу, тогда как ведомый добавит некоторую задержку к отметке времени и будет обрабатывать и удалять записи из space1
чуть позже.
У этого подхода есть еще одно преимущество. Если файл был ошибочно помещен в карантин на мастере, это будет видно из журнала, как только мы запросим мастер. При этом клиент, запросивший файл, вернется к слейву — и пользователь получит нужный файл.
Итак, мы рассмотрели ситуацию, в которой демон Valkyrie находит файл с именем sha1
, и этот файл (являющийся потенциальным кандидатом на удаление) имеет соответствующую запись в space1
. Какие еще варианты возможны?
Предположим, что файл находится на диске, но в FileDB нет соответствующей записи. Если в рассмотренном выше случае мастер-экземпляр Valkyrie по каким-то причинам какое-то время не работал, это будет означать, что у слейва было достаточно времени, чтобы поместить файл в карантин и удалить соответствующую запись из пробел1
. В этом случае мы также помещаем файл в карантин, используя sha1.deleted.timestamp
.
Другая ситуация: запись существует, но указывает на другую пару дисков. Это могло произойти во время загрузки, если для одного письма указаны два получателя. Вспомните эту схему:
Что произойдет, если второй загрузчик загрузит файл в другую пару, чем первый? Он увеличит счетчик на space0
, но пара дисков, на которую был загружен файл, будет содержать несколько ненужных файлов. Что нам нужно сделать, так это убедиться, что эти файлы могут быть прочитаны и что они соответствуют ша1
. Если все в порядке, такие файлы можно сразу удалить.
Кроме того, Valkyrie может обнаружить файл, помещенный в карантин. Если карантин закончится, этот файл будет удален.
Теперь представьте, что Валькирия нашла хороший файл. Его нужно прочитать с диска, проверить на целостность и сравнить с sha1
. Затем Valkyrie необходимо запросить второй диск, чтобы узнать, есть ли на нем тот же файл. Здесь достаточно простого метода HEAD
: демон, работающий на втором диске, сам проверит целостность файла. Если файл поврежден на первом диске, он немедленно копируется со второго диска. Если на втором диске нет файла, его копия загружается с первого диска.
Осталась последняя ситуация, связанная с проблемами с диском. Если в ходе системного мониторинга выявляется какая-либо проблема с диском, проблемный диск переводится в сервисный (только для чтения) режим, а на втором диске выполняется операция UNMOVE
. Это эффективно распределяет все файлы на втором диске между другими парами дисков.
Результат
Вернемся к тому, с чего начали. Раньше наше хранилище электронной почты выглядело так:
После внедрения новой системы нам удалось уменьшить общий размер на 18 ПБ: 9-38.
Но допустим, что это возможно. В этом случае, когда файл запрашивается по его хеш-значению, мы проверяем, имеет ли он правильный размер и контрольную сумму CRC32, которые были сохранены в индексах соответствующего письма при загрузке. То есть запрошенный файл будет предоставлен только в том случае, если он был загружен вместе с этим письмом.
Особенности файловой системы, с которыми мы столкнулись при разработке механизма синхронизации с Облаком Mail.Ru | Антон Скогорев
9 минут чтения·
30.08.2016Синхронизация данных — одна из основных функций Облака Mail.Ru настольного клиента . Его цель — полная синхронизация выбранных папок и файлов на ПК пользователей с их версией в облаке. При разработке этого механизма мы обнаружили некоторые (поначалу) достаточно очевидные особенности различных файловых и операционных систем. Однако, если вы не знаете о них, вы можете оказаться в беде (вы не сможете скачать или удалить файл). В этой статье мы собрали информацию о том, что при осведомленности вы сможете корректно работать с данными на дисках и, возможно, больше никогда не нуждаетесь в срочном исправлении.
Любой механизм синхронизации каталогов требует отслеживания изменений состояния файлов и папок. К счастью, API каждой операционной системы может сделать это за нас. Мы используем ReadDirectoryChangesW для Windows, FSEventStream для macOS и inotify для Linux. И вот первый раз начинаются неприятности. Дело в том, что для macOS нельзя точно сказать, какое именно событие пришло от файловой системы. Вы можете легко получить СОЗДАНО , УДАЛЕНО , ПЕРЕИМЕНОВАНО и ИЗМЕНЕНО на файле в одном событии.
И вроде все логично: если есть удаление, то файла больше нет. Однако:
$ rm 1.txt && echo «hello» > 1.txt
будет одно событие:
1.txt: СОЗДАНО | УДАЛЕНО | MODIFIED
Поэтому необходимо использовать дополнительные механизмы проверки событий, чтобы понять, что произошло с файлом или каталогом.
В inotify может переполниться очередь событий, и вы можете начать ее терять, пока не удалите некоторые события из очереди. В этом случае потерянные события вам никак не компенсируются, и вам приходится выполнять дорогостоящие операции вроде обхода диска.
Символические ссылки могут зацикливаться: A -> B -> C -> B. Решить эту проблему можно, например, с помощью номера инода (уникальный номер файла или папки в текущем разделе диска. Но мы расскажу об этом позже). В нашем случае мы сохраняем список инодов символических ссылок, которые мы собрали на текущий каталог. Если айнод текущей символической ссылки такой же, как в списке, то мы считаем его зацикленным и пропускаем.
Символическая ссылка может оказаться мертвой. Если в какой-то момент содержимое указанной символической ссылки будет перемещено или удалено, ссылка станет недоступной. Важно правильно обработать этот момент.
Если вы подписываетесь на событие каталога, где у вас есть символические ссылки на другие каталоги, события об изменении содержимого символической ссылки не будут доставлены.
Раньше была интересная ошибка, связанная с этим. В локальном дереве пользователя, сообщившего нам о проблеме, был файл. Однако когда мы попытались прочитать его, то увидели, что на самом деле файла нет. Казалось бы, логичная ситуация, если файл удаляется в момент, когда мы начинаем свою работу. Но файл снова был на месте после следующего листинга каталога.
Дело в том, что можно создать недопустимую кодировку UTF-16 в Windows. Точнее, имя может содержать недопустимую суррогатную пару. Преобразовать это имя в UTF-8, а затем обратно в UTF-16 стандартными средствами (WideCharToMultiByte, MultiByteToWideChar) не получится. Вот пример:
wchar_t имя[] = {0xDCA9, 0x2E, 0x74, 0x78, 0x74, 0x00};
Суррогатные пары состоят из значений High и Low и необходимы для расширения диапазона кодируемых символов. High Surrogates находятся в диапазоне xD800 — xDB7F. Низкие суррогаты находятся в диапазоне от DC00 до DFFF. Мы взяли Высокое, но не Низкое от нашего имени. Таким образом, мы получили невалидный код UTF-16.
Теперь конвертируем это имя в UTF-8, потом обратно:
wchar_t name2[] = { 0xFFFD, 0x2E, 0x74, 0x78, 0x74, 0x00 }; // «� .txt»
Символ, обозначающий начало суррогатной пары, разрывается, и вы больше не можете использовать это имя.
Пример кода
Мы всегда работаем с UTF-8 в модуле синхронизации. Мы получаем события или списки из файловой системы и конвертируем имена в UTF-8. Сервер также работает с UTF-8. При доступе к файловой системе мы должны преобразовать UTF-8 обратно в UTF-16. Эта проблема была решена запретом синхронизации невалидных кодировок UTF-16.
Настольный клиент долгое время не поддерживал переименование файлов и папок. Вместо этого событие переименования обрабатывалось путем удаления файлов в одном месте и создания их в другом. Этот механизм работал долгое время, причем достаточно стабильно. Дело в том, что удаление файла из облака означает лишь удаление ссылки на этот файл из пользовательского дерева. Сам файл при этом некоторое время остается живым на сервере, чтобы вы, например, могли восстановить его из корзины. Таким образом, удаление и создание файла в другом месте управлялось как раз метаинформацией на сервере, который просто удалял ссылку на файл из одного места и создавал его в другом, даже не открывая локальную копию. Однако с появлением общих папок мы стали понимать, что именно движения мы должны обрабатывать (чтобы не потерять атрибут общей папки и не размонтировать прикрепленную папку).
Одно дело, когда событие переименования происходит из файловой системы. В таком случае никаких проблем нет. Щелчок-щелчок, и он переименован. А если приложение не работает? Нам нужна некоторая информация, которую мы можем использовать для обнаружения события переименования. Было несколько вариантов обнаружения перемещений:
- Сравнить иерархию файлов и папок. Это очень сложный процесс, даже зная, что деревья хранятся в памяти.
- Нам нужно создать скрытые файлы со служебной информацией в каждой папке, чтобы мы могли понять, куда папка переместилась или во что она была переименована. Однако это вызывает некоторые сложности, в том числе и то, что пользователь может изменять и редактировать эти служебные файлы, что может привести к неприятным последствиям. И мы также не хотели «просматривать» каждый каталог.
- Иноды. В итоге остановились на этом варианте.
Inode — это дескриптор индекса. Он обозначается целым числом и представляет собой идентификатор файла или папки в конкретной файловой системе.
Я рекомендую прочитать эту статью, чтобы лучше понять, как это работает. В POSIX мы получаем индекс из stat (st_ino), а в Windows — GetFileInformation (nFileIndex). А вроде бы все довольно просто:
- клиент перезапускается, и мы загружаем кешированное представление файловой иерархии.
- Теперь сравним это с тем, что есть на самом деле на диске.
- Мы находим узлы, в которых номера инодов отсутствуют там, где мы предполагали, что они должны быть, но на самом деле они находятся в другом месте.
- Затем мы перемещаем эти узлы.
Тем не менее, вы должны быть очень осторожны с инодами. Вот некоторые из ловушек и ловушек, с которыми мы столкнулись.
Каждая ссылка этого типа на один файл имеет одинаковый номер инода. Мы не обнаруживаем переименование, если в дереве есть жесткие ссылки. Жесткую ссылку на папку создать нельзя (ну или почти невозможно), так что тут особых проблем нет.
Номера инодов не назначаются так, как должны быть в некоторых файловых системах (точнее, как мы думаем, должны быть). Мы считаем, что их номера не меняются при переименовании файла. Мы также предполагаем, что если мы удалим последний файл на ФС с инодом 9, то следующий файл будет иметь инод номер 10. К сожалению, некоторые файловые системы с этим не согласны.
Новые файлы (не папки) с номером inode 9999… создаются для macOS на FAT. При переименовании этих файлов номер инода не меняется. При редактировании этих файлов числа меняются на порядковые значения, как мы и ожидали увидеть:
$ touch 1. txt
$ ls -i
999999999 1.txt
$ echo «hello» > 1.txt
$ ls -i
223 1.txt
Ext 4. Дело в том, что если на этой файловой системе (которая является стандартной в большинстве дистрибутивов Linux) удаляем файл с номером инода 9 в одном месте, а создаем новый файл в другом месте, у него будет инод не 10 и выше, а 9
$ touch 1.txt
$ ls -i
270 1.txt
$ rm 1.txt && touch 2.txt
$ ls -i
270 2.txt
Т.е. в этой файловой системе первый свободный номер становится номером инода. Это немного странно для нас. Решение пришло само собой: если мы обнаружили переименование папки, то сравниваем номера инодов для папок и хеш + размер файлов для их содержимого. Если каталоги такие же 70% и выше, то переименовываем их. Для файлов — если совпадают хеш + размер.
Учитывая, что нумерация инодов в разных файловых системах работает по-разному, мы должны проверить, работают ли иноды так, как мы ожидаем: при запуске модуля синхронизации воспроизводится тестовое поведение для проверки. Если все так, как мы ожидаем, можно будет работать с номерами инодов. В противном случае продолжаем без переименования поддержки.
Операционные системы и программы с разной популярностью используют служебные файлы на диске, и синхронизировать их нет смысла. Список файлов и масок, которые, как нам казалось, должен игнорировать механизм синхронизации, приведен ниже:
Windows:
- desktop.ini — хранит пользовательские настройки для текущей директории;
- Thumbs.db — кэши превью изображений;
- файлы, начинающиеся с «~$» или «.~», или начинающиеся с «~» и заканчивающиеся на «.tmp», являются довольно часто используемыми шаблонами временных файлов. Microsoft Office также создает файлы таких шаблонов при редактировании документов.
macOS:
- .DS_Store — аналог desktop.ini для Windows;
- Icon\r — довольно интересный файл; отображается как «Значок?» при листинге сохраняет информацию об значке в каталоге, в котором он находится;
- файлы, начинающиеся с «. _» — вместо этого было довольно много шаблонов, но различные программные приложения предпочитают использовать свой формат для временных файлов, поэтому мы решили игнорировать файлы под этой маской.
Linux:
- .directory — аналог desktop.ini для Windows и .DS_Store для macOS, актуален для некоторых оконных менеджеров.
Пути для Windows, конечно же, заслуживают особого внимания. Для путей, превышающих значение MAX_PATH (260 символов), необходимо использовать префикс «\\? \”. Этот префикс, кстати, стоит использовать для CreateFile, если вы планируете открывать COM-порт.
Windows создает короткие псевдонимы (также называемые «8.3») для каждого файла или папки с именами длиннее 8 символов. Псевдонимы всегда находятся в верхнем регистре и содержат символ «~», за которым следует число, которое увеличивается, если этот псевдоним уже используется (например: «C:\PROGRA~1\» ). Содержание этих функций необходимо, но в конечном итоге недостаточно, чтобы понять, что перед вами просто обычное имя или короткий псевдоним. WinApi может конвертировать короткие пути обратно в длинные (GetFullPathName). Однако необходимо помнить, что он не будет преобразовывать путь в его длинное представление, если такого файла больше не существует.
Если кто-то откроет файл через CreateFile по короткому пути и модифицирует его, то этот же короткий путь придет к вам в событии из файловой системы (через ReadDirectoryChangesW). В связи с этим мы стараемся конвертировать их в длинную версию как можно быстрее. Кстати, посмотреть псевдонимы можно, введя «dir/x» из нужного каталога в командной строке Windows.
Еще одна неприятная особенность, которую нельзя игнорировать: файлы и папки с точкой на конце нельзя открыть с помощью проводника (актуально для Windows 7):
Алгоритм синхронизации пришлось адаптировать под каждую файловую систему. Реконструкция тестовой среды, когда вы запускаете для того, чтобы проверить папку, которую выбирает пользователь, была лучшим решением в нашем случае. И если тесты не пройдены, мы либо запрещаем пользователю работать с этой папкой, либо деактивируем некоторые функции.
Ваш комментарий будет первым