Как создать loop linux

Как создать loop linux

Другой пример смотрите в losetup(8).

Для шифрования и расшифровки каждому закольцованному устройству может быть назначена функция обмена.

Для закольцованного блочного устройства доступны следующие операции ioctl(2):

LOOP_SET_FD Связывает закольцованное устройство с открытым файлом, чей файловый дескриптор передаётся в третьем аргументе ioctl(2). LOOP_CLR_FD Отвязывает закольцованное устройство от файлового дескриптора. LOOP_SET_STATUS Назначает состояние (передаваемое в третьем аргументе ioctl(2)) закольцованному устройству. Данный аргумент представляет собой указатель на структуру loop_info, определённую в следующим образом:

Типом шифрования (lo_encrypt_type) должно быть одно из значений: LO_CRYPT_NONE, LO_CRYPT_XOR, LO_CRYPT_DES, LO_CRYPT_FISH2, LO_CRYPT_BLOW, LO_CRYPT_CAST128, LO_CRYPT_IDEA, LO_CRYPT_DUMMY, LO_CRYPT_SKIPJACK или LO_CRYPT_CRYPTOAPI (начиная с Linux 2.6.0).

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

LO_FLAGS_READ_ONLY Закольцованное устройство доступно только для чтения. LO_FLAGS_AUTOCLEAR (начиная с Linux 2.6.25) Закольцованное устройство автоматически уничтожится после закрытия. LO_FLAGS_PARTSCAN (начиная с Linux 3.2) Разрешено автоматическое сканирования разделов. LOOP_GET_STATUS Получить состояние закольцованного устройства. В третьем аргументе ioctl(2) должен быть задан указатель на структуру struct loop_info. LOOP_CHANGE_FD (начиная с Linux 2.6.5) Поменять источник данных (backing store) закольцованного устройства на новый файл, определяемый файловым дескриптором, указанным в третьем аргументе ioctl(2), представленный целым числом. Данная операция допустима только, если закольцованное устройство доступно только на чтение и новый источник данных имеет тот же размер и тип, использованный ранее. LOOP_SET_CAPACITY (начиная с Linux 2.6.30) Изменить размер используемого (live) закольцованного устройства. Можно изменить размер используемого источника данных, а затем применить эту операцию для того, чтобы драйвер закольцованных устройств учёл новый размер. У этой операции нет аргументов.

Начиная с Linux 2.6, появилось две новые операции ioctl(2):

LOOP_SET_STATUS64, LOOP_GET_STATUS64 Они подобны описанным выше LOOP_SET_STATUS и LOOP_GET_STATUS, но используют структуру loop_info64, в которой есть несколько дополнительных полей, а некоторым другим полям назначены типы с большим диапазоном значений:

Источник

Вопросы по устройствам Loop и монтированию образа диска

По поводу первой команды «Мне нужно» Рассчитать смещение от начала изображения до начала раздела «, но не знаю, что означают числа, указанные в ** (512 в этом примере):

о второй команде, что такое «loop0»:

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

Как работает третья команда? Что означает каждая часть в этом?:

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

Спасибо за ваши ответы и обучение меня (:

1 ответ

В первой команде число 512 относится к размеру блока изображения. Когда файл записывается на диск, он использует x количество блоков. Оставшаяся часть любого неиспользованного блока — пустое место. Вот почему вы иногда видите вещи, перечисленные как размер (фактический размер файла, папки и т. Д.) И размер на диске (объем фактически занятого диска, что позволяет учитывать несоответствие размера блока. Возьмите, например, файл размером 1234 байта, если бы мы использовали блоки по 512 байт, то на самом деле это заняло бы 3 блока, или 1536 байт (512 * 3) и 302 байта (1536 — 1234) были бы «потрачены впустую».

Loop0 — это устройство с обратной связью. Все файлы в /dev на самом деле устройства (отсюда и название:-)). Linux рассматривает устройства как файлы, что позволяет очень легко выполнять некоторые задачи при работе с оборудованием. т. е. следующая команда отправит аудиофайл непосредственно на звуковую карту для воспроизведения (программное обеспечение не требуется, аккуратно!)

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

Для последней команды мы просто монтируем файловую систему на вашем поддельном диске (ваш файл образа) в папку в локальной файловой системе. В Linux мы используем плоскую структуру каталогов, поэтому каждое местоположение файла (включая устройства, сетевые диски и внешние жесткие диски и т. Д.) Начинается с ‘/’, который также называется корнем файловой системы. Монтирование файловой системы просто помещает ее в место, доступное для остальной части системы (где-то в /).

Читайте также:  Принтер epson stylus sx130 драйвер windows 10

Теперь по умолчанию только пользователь с именем «root» может монтировать файловые системы. Пользователь root в основном такой же, как пользователь администратора в Windows. Кто-то, кто может сделать что-нибудь на компьютере. В Ubuntu пользователь root скрыт для безопасности, поэтому нам нужно использовать sudo , Команда sudo, по сути, означает «эй, сделайте меня пользователем root для запуска этой команды».

mount вот команда, которую мы запускаем как root (sudo), /dev/loop0 — это наш поддельный диск, который мы создали ранее, и /mnt — это место, где мы хотим, чтобы образ был доступен. /mnt и /media — это стандартные места в Linux, где мы монтируем файловые системы, хотя это может быть где угодно. Лучше всего создавать подпапку в /mnt или /media для монтирования, вместо просто /mnt. Это потому, что у вас могут быть смонтированы другие файловые системы, и если вы смонтируете поверх них, они не будут доступны! Единственное предостережение: вам нужны права суперпользователя для создания папки, поэтому ваша последняя команда должна состоять из двух команд и выглядеть следующим образом:

mkdir это просто команда для создания каталога.

Источник

How to create virtual block device (loop device/filesystem) in Linux

Linux supports a special block device called the loop device, which maps a normal file onto a virtual block device. This allows for the file to be used as a “virtual file system” inside another file. With Linux it’s possible to create a file-system inside a single file. These storage devices are available as device files such as /dev/device_name.

Create a file

1. First step is to create a file of desired size. The following command will create a file that is 1 GB in size:

2. Verify the size of the file you have just created.

Create the loop device

1. Next step is to create a loop device with the file. Use the command “losetup” to create a loop device “loop0”

Here,
-f – find the first unused loop device. If a file argument is present, use this device. Otherwise, print its name.
-P – force kernel to scan partition table on newly created loop device.

2. To print the loop device generated using the above command use “losetup -a”.

Create the filesystem

1. Now lets create a ext4 filesystem on the loopback device.

Mount the loopback filesystem

1. We can now mount the loopback filesystem onto a directory. The “-o loop” additional option is used to mount loopback filesystems.

2. Verify the size of the new mount point and type of filesystem using below commands.

Removing loop device

If you want remove the new filesystem, use the following steps:
1. Umount and delete the directory /loopfs

2. Delete the loopback device “loop0” created using the “losetup -d” command.

3. Finally remove the file “/root/loopbackfile.img” used to create the loop device.

Enable Encryption on loop filesystem

‘losetup’ also allows to enable data encryption in order to get a crypted filesystem. The syntax to created a encrypted loop device si as shown below:

The following encryption algorithms are accepted:

  • NONE use no encryption (default).
  • XOR use a simple XOR encryption.
  • DES use DES encryption.

DES encryption is only available if the optional DES package has been added to the kernel. DES encryption uses an additional start value that is used to protect passwords against dictionary attacks.

Источник

Bash-скрипты, часть 2: циклы

В прошлый раз мы рассказали об основах программирования для bash. Даже то немногое, что уже разобрано, позволяет всем желающим приступить к автоматизации работы в Linux. В этом материале продолжим рассказ о bash-скриптах, поговорим об управляющих конструкциях, которые позволяют выполнять повторяющиеся действия. Речь идёт о циклах for и while , о методах работы с ними и о практических примерах их применения.

Внимание: в посте спрятана выгода!

Циклы for

Оболочка bash поддерживает циклы for , которые позволяют организовывать перебор последовательностей значений. Вот какова базовая структура таких циклов:

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

Перебор простых значений

Пожалуй, самый простой пример цикла for в bash-скриптах — это перебор списка простых значений:

Читайте также:  Планшетный экран windows 10

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


Простой цикл for

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

Перебор сложных значений

В списке, использованном при инициализации цикла for , могут содержаться не только простые строки, состоящие из одного слова, но и целые фразы, в которые входят несколько слов и знаков препинания. Например, всё это может выглядеть так:

Вот что получится после того, как этот цикл пройдётся по списку. Как видите, результат вполне ожидаем.


Перебор сложных значений
TNW-CUS-FMP — промо-код на 10% скидку на наши услуги, доступен для активации в течение 7 дней»

Инициализация цикла списком, полученным из результатов работы команды

Ещё один способ инициализации цикла for заключается в передаче ему списка, который является результатом работы некоей команды. Тут используется подстановка команд для их исполнения и получения результатов их работы.

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


Цикл, который перебирает содержимое файла

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

Что, если это совсем не то, что нужно?

Разделители полей

Причина вышеописанной особенности заключается в специальной переменной окружения, которая называется IFS (Internal Field Separator) и позволяет указывать разделители полей. По умолчанию оболочка bash считает разделителями полей следующие символы:

  • Пробел
  • Знак табуляции
  • Знак перевода строки

Если bash встречает в данных любой из этих символов, он считает, что перед ним — следующее самостоятельное значение списка.

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

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

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


Построчный обход содержимого файла в цикле for

Разделителями могут быть и другие символы. Например, выше мы выводили на экран содержимое файла /etc/passwd . Данные о пользователях в строках разделены с помощью двоеточий. Если в цикле нужно обрабатывать подобные строки, IFS можно настроить так:

Обход файлов, содержащихся в директории

Один из самых распространённых вариантов использования циклов for в bash-скриптах заключается в обходе файлов, находящихся в некоей директории, и в обработке этих файлов.

Например, вот как можно вывести список файлов и папок:

Если вы разобрались с предыдущим материалом из этой серии статей, вам должно быть понятно устройство конструкции if-then , а так же то, как отличить файл от папки. Если вам сложно понять вышеприведённый код, перечитайте этот материал.

Вот что выведет скрипт.


Вывод содержимого папки

Обратите внимание на то, как мы инициализируем цикл, а именно — на подстановочный знак «*» в конце адреса папки. Этот символ можно воспринимать как шаблон, означающий: «все файлы с любыми именами». он позволяет организовать автоматическую подстановку имён файлов, которые соответствуют шаблону.

При проверке условия в операторе if , мы заключаем имя переменной в кавычки. Сделано это потому что имя файла или папки может содержать пробелы.

Циклы for в стиле C

Если вы знакомы с языком программирования C, синтаксис описания bash-циклов for может показаться вам странным, так как привыкли вы, очевидно, к такому описанию циклов:

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

На bash это можно написать так:

А вот рабочий пример:

Этот код выведет список чисел от 1 до 10.


Работа цикла в стиле C

Цикл while

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

Читайте также:  What linux is android based on

Вот схема организации циклов while
while команда проверки условия
do
другие команды
done

Взглянем на пример скрипта с таким циклом:

На входе в цикл проверяется, больше ли нуля переменная $var1 . Если это так, выполняется тело цикла, в котором из значения переменной вычитается единица. Так происходит в каждой итерации, при этом мы выводим в консоль значение переменной до его модификации. Как только $var1 примет значение 0, цикл прекращается.


Результат работы цикла while

Если не модифицировать переменную $var1 , это приведёт к попаданию скрипта в бесконечный цикл.

Вложенные циклы

В теле цикла можно использовать любые команды, в том числе — запускать другие циклы. Такие конструкции называют вложенными циклами:

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


Вложенные циклы

Обработка содержимого файла

Чаще всего вложенные циклы используют для обработки файлов. Так, внешний цикл занимается перебором строк файла, а внутренний уже работает с каждой строкой. Вот, например, как выглядит обработка файла /etc/passwd :

В этом скрипте два цикла. Первый проходится по строкам, используя в качестве разделителя знак перевода строки. Внутренний занят разбором строк, поля которых разделены двоеточиями.


Обработка данных файла

Такой подход можно использовать при обработке файлов формата CSV, или любых подобных файлов, записывая, по мере надобности, в переменную окружения IFS символ-разделитель.

Управление циклами

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

Команда break

Эта команда позволяет прервать выполнение цикла. Её можно использовать и для циклов for , и для циклов while :

Такой цикл, в обычных условиях, пройдётся по всему списку значений из списка. Однако, в нашем случае, его выполнение будет прервано, когда переменная $var1 будет равна 5.


Досрочный выход из цикла for

Вот — то же самое, но уже для цикла while :

Команда break , исполненная, когда значение $var1 станет равно 5, прерывает цикл. В консоль выведется то же самое, что и в предыдущем примере.

Команда continue

Когда в теле цикла встречается эта команда, текущая итерация завершается досрочно и начинается следующая, при этом выхода из цикла не происходит. Посмотрим на команду continue в цикле for :

Когда условие внутри цикла выполняется, то есть, когда $var1 больше 5 и меньше 10, оболочка исполняет команду continue . Это приводит к пропуску оставшихся в теле цикла команд и переходу к следующей итерации.


Команда continue в цикле for

Обработка вывода, выполняемого в цикле

Данные, выводимые в цикле, можно обработать, либо перенаправив вывод, либо передав их в конвейер. Делается это с помощью добавления команд обработки вывода после инструкции done .

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

Оболочка создаст файл myfile.txt и перенаправит в этот файл вывод конструкции for . Откроем файл и удостоверимся в том, что он содержит именно то, что ожидается.


Перенаправление вывода цикла в файл

Пример: поиск исполняемых файлов

Давайте воспользуемся тем, что мы уже разобрали, и напишем что-нибудь полезное. Например, если надо выяснить, какие именно исполняемые файлы доступны в системе, можно просканировать все папки, записанные в переменную окружения PATH . Весь арсенал средств, который для этого нужен, у нас уже есть, надо лишь собрать всё это воедино:

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


Поиск исполняемых файлов в папках из переменной PATH

Итоги

Сегодня мы поговорили о циклах for и while в bash-скриптах, о том, как их запускать, как ими управлять. Теперь вы умеете обрабатывать в циклах строки с разными разделителями, знаете, как перенаправлять данные, выведенные в циклах, в файлы, как просматривать и анализировать содержимое директорий.

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

Уважаемые читатели! В комментариях к предыдущему материалу вы рассказали нам много интересного. Уверены, всё это окажет неоценимую помощь тем, кто хочет научиться программировать для bash. Но тема эта огромна, поэтому снова просим знатоков поделиться опытом, а новичков — впечатлениями.

Источник

Оцените статью