Вступление
Вы когда-нибудь чувствовали, что вы столкнулись с проблемой, который доставит вам долгое время, чтобы решить? У меня было это чувство, когда мне пришлось отслеживать поврежденные файлы в хранилище Azure Blob. К счастью, с помощью некоторых скриптов PowerShell для Azure я смог легко проследить и исправить файлы, в моем случае удаляя их.
Если это звучит вам знакомы, и если вы ищете пошаговый план обрабатывать файлы навалом, то вы пришли на правильное место. В этой статье я буду кратко обсудить, как файлы повреждены. Затем я покрою ручной подход, который я взял, чтобы найти файлы. Наконец, я представлю пошаговый план сценариев PowerShell для поиска и удаления файлов байтов 0.
Причина проблемы: вне памяти
Обеспечение приложения — это платформа цифрового опыта ( Kentico Xperience ), которая состоит из типичных компонентов Azure, таких как Azure Web App, Azure SQL базы данных и хранение BLOB Azure для хранения мультимедийных файлов. Синхронизация с системой управления информацией о продукте осуществляется каждую ночь через запланированную задачу, в результате чего новейшие данные продукта, включая изображения, обновляются и хранятся в хранилище Azure Blob. Синхронизация проходила гладко до некоторой точки сообщения об ошибке: Тип исключения: система. OutofMemoryException
произошел.
Сбой синхронизации не был напрямую связан с сломанными изображениями. Только после того, как отчеты пришли в эти изображения были случайным образом отсутствуют на сайте, стало ясно, что происходит больше. Отладка процессора изображения показала, что из-за исключения памяти миниатюры были сгенерированы как 0 изображений байтов, распространяются над десятками папок 😱. И поскольку только обновленные продукты синхронизируются, в поисках сломанных изображений миниатюры похоже на поиск иглы в стоге сена.
Ручной подход к поиску и удалению сломанных изображений
В поисках байтовых файлов я попал на папки Azure Temp и Azure Cache в Azure Web App. Приложение использует эти папки для хранения временных данных из хранения Azure Blob. Через Куду Консоль Услуга доступна для Azure Web Apps, можно перемещаться по этим папкам с помощью командной строки. Выполняя следующий скрипт командной строки, все 0 файлов байтов будут искать и записаны в файл TXT:
forfiles /S /M *.* /C "cmd /c if @fsize EQU 0 (if @isdir EQU FALSE echo @path)" > list.txt
Источник: Как найти и перечислите нулевые байтовые файлы в Windows и Linux
Теперь, когда у нас есть список сломанных файлов, мы можем отслеживать их в контейнере для хранения носителя Azure Blob. Для этого я могу очень рекомендовать Microsoft Azure Storage Explorer 💯.
Этот подход работает нормально, если вам нужно только пройти разумное количество файлов и папок. В моем случае это касается десятков файлов в еще большего количества папок. Вот почему я пошел в поисках способа поиска и удалять все 0 байтовых файлов в одном Go. Azure PowerShell к спасению!
Пошаговое руководство Azure PowerShell для поиска и удаления 0 Байтовые файлы
Это руководство основано на командах Azure PowerShell. Для получения дополнительной информации проверить, как вы можете Установите модуль Azure AZ PowerShell Отказ Шаги состоят из команд Azure PowerShell для:
- Доступ к подписке Azure
- Укажите учетную запись Azure Storage
- Выполните команду поиска, чтобы найти файлы
- Расширить команду поиска с инструкцией для удаления
В следующих шагах нам нужно будет предоставить некоторые данные из Azure. Рекомендуется проверить, есть ли у вас необходимые разрешения для доступа к вышеупомянутым ресурсам Azure через Azure PowerShell.
ПРИМЕЧАНИЕ. Я рекомендую проверить сценарии широко в тестовой среде, прежде чем идти на дикий на производстве.
Шаг 1: Подключитесь к вашей Azure Account Вы можете необязательно указать желаемый арендатор Azure, проходя в -Тенантид
параметр. Смотрите Документация для получения дополнительной информации.
Connect-AzAccount
Шаг 2: Создайте контекст хранения Azure Далее мы укажем, какое хранение Azure Blob мы собираемся нацелить. Это можно сделать с помощью Контекст хранения Azure . Поскольку нам нужен контекст на следующих шагах, мы храним контекст хранения Azure в $ Контекст
Переменная.
$Context = New-AzStorageContext -StorageAccountName "< Account Name >" -StorageAccountKey "< Storage Key ends with == >"
Шаг 3: Поиск файлов Используя контекст хранения Azure, хранящийся на предыдущем шаге, мы можем извлечь файлы из желаемого Azure Consier. Расширяя Get-azstorageblob Команда с Где-объект Трубопровод Мы можем точно указать, что нам нужно, а именно все 0 байтовых файлов.
Get-AzStorageBlob -Context $Context -Container "< Container Name >" | Where-Object {$_.Length -eq 0}
Вы можете продлить состояние, чтобы отфильтровать только изображения (JPG) путем дополнительно прохождения в типе содержимого:
Get-AzStorageBlob -Context $Context -Container "< Container Name >" | Where-Object {$_.Length -eq 0 -and $_.ContentType -eq "image/jpeg"}
Шаг 4: Удалить 0 байтовых файлов Если вы отслеживаете сломанные изображения, удаление их должна быть супер простым. Вам нужно только добавить Удалить-azstorageblob Трубопровод в конце команды с предыдущего шага:
Get-AzStorageBlob -Context $Context -Container "< Container Name >" | Where-Object {$_.Length -eq 0} | Remove-AzStorageBlob
В случае дополнительных JPG изображений типа содержимого фильтра:
Get-AzStorageBlob -Context $Context -Container "< Container Name >" | Where-Object {$_.Length -eq 0 -and $_.ContentType -eq "image/jpeg"} | Remove-AzStorageBlob
И с тем, что у вас есть все скрипты, необходимые для поиска сломанных файлов и удалите их в навалом 😊.
Заключение
В этой статье я поделился своим подходом, чтобы решить проблему, с которым я столкнулся, в каких изображениях стал поврежден из-за проблем с памятью Azure Web Application. В первой части статьи я предоставил решение вручную обнаруживать и удалить сломанные файлы объединенными усилиями консоли KUDU и Explorer Microsoft Azure. Потому что в моем случае он включал существенное количество файлов, я также предоставил пошаговое руководство, состоящее из команд Azure PowerShell для поиска соответствующих файлов и удалять их в одном.
В конце я надеюсь, что вы не бегите в эти ситуации, и что ваше приложение продолжает работать гладко. Во всех остальных случаях я надеюсь, что этот пост был полезен.
Спасибо за чтение!
Оригинал: «https://dev.to/truelime/tackle-0-byte-files-in-azure-blob-storage-with-ease-using-az-powershell-5fb7»