Настраиваем разрешения на запись на флешке с файловой системой ext4

prolinux

Опубликован:
2024-12-22T23:28:22.118771Z
Отредактирован:
2024-12-22T23:28:22.118771Z
Статус:
публичный
5
0
0

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

Диагностика сбоя

Итак, в моём распоряжении есть старая, усталая флешка — USB flash накопитель, маркировка на корпусе которого уже стёрта временем и перепитиями судьбы. Я отформатировал её дисковое пространство в файловую систему ext4, запустил файловый менеджер, смонтировал в нём раздел накопителя и пытаюсь записать на устройство каталог с файлами для переноса на другую машину вне сети. И вот что я вижу в окне файлового менеджера, когда нажимаю правую кнопку мыши на его свободном поле в точке монтирования девайса.

yubmj5W3iB.png

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

В адресной строке файлового менеджера указан адрес точки монтирования — она расположена в системном каталоге /media, который специально предназначен для монтирования сменных накопителей. В этот системный каталог вложен каталог с именем текущего пользователя системы, от чьего имени я залогинился в операционной системе — jazz. В этот каталог вложен ещё один каталог с именем sharefs — это имя программа монтирования раздела взяла из метки тома монтируемого раздела. И вся каверза ситуации кроется именно в этом конечном каталоге точки монитрования, а точнее, в его системных атрибутах. Как известно, файлы и каталоги в файловой системе ext4 имеют владельца и права доступа. И чтобы решить сложную ситуацию, с которой столкнулся я в рамках этого обзора, необходимо посмотреть на атрибуты каталога sharefs — конечного каталога в точке монтирования раздела сменного диска. Самая обычная команда ls из пакета coreutils покажет нам эти атрибуты. Открываю терминал, без него никуда в Linux, и вбиваю в приглашении командной строки следующую команду.

$ ls -l /media/jazz/

И вот что я вижу в своём терминале.

phE2LgjByS.png

На снимке экрана выше видно, что каталог sharefs принадлежит пользователю root, а запись в каталог разрешена только хозяину. Все остальные пользователи и пользователи из группы root этой возможности лишены. И именно поэтому у вас не получается записать данные на только что отформатированный в файловую систему ext4 раздел любого, абсолютно любого накопителя. В данном случае я имею дело с разделом на флешке, но это мог быть и HDD, или SSD, или карта памяти, без разницы.

Решение проблемы

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

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

$ sudo chown jazz:jazz /media/jazz/sharefs

Здесь я указала имя нового владельца — jazz, и через двоеточие имя группы этого пользователя — jazz. Далее в команде следует адрес каталога, аттрибуты которого я намерен изменить. Жму enter.

tZTkVLKKyv.png

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

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

Iwi9KXIjdS.png

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

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

$ cp -R CodeJ/drafts/ext4-owner/ /media/jazz/sharefs/

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

n3x5E7c8DV.png

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

Выводы и умозаключения

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

Для изменения атрибутов доступа к файлам и каталогам в файловой системе ext4 предназначены команды chown и chmod из пакета coreutils. При этом, если файл или каталог, чьи атрибуты необхоимо изменить, не принадлежит текущему пользователю системы, в этом случае ему потребуется получить права суперпользователя. sudo решает.