Linux невозможно создать обычный файл

Что это может быть?

Собственно, лог из консоли (я нахожусь в /media/sdb/work):

$ mount | grep media ; df -h | grep media ; cp -r OLD/log/ ./ --- /dev/sdb1 on /media/sdb type btrfs (rw) --- /dev/sdb1 1,9T 1,1T 835G 56% /media/sdb --- cp: невозможно создать обычный файл «./log/chapters/1.txt»: На устройстве не осталось свободного места 

И так все файлы из каталога log, или любого другого. А самое смешное — команды mkdir/rmdir и touch/rm таких ошибок в том же каталоге не возвращают. Юзер под которым я сижу создан при установке ОС, никаких ограниений или настройки прав не делал, с правами доступа в рабочем каталоге всё в порядке (я владелец ФС с полными правами), вот только с btrfs ранее не работал.

На текущий момент не имею доступа к серверу

Думаете, я мог исчерпать допустимое количество inode`ов? Ок, допустим, это так и есть. Что мне делать? Удалять файлы? Я недавно снёс каталог с ~30к файлов.

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

свободное место нужно смотерь через btrfs filesystem df, а не через обычный df

Re: На текущий момент не имею доступа к серверу

Поставить нормальную файловую систему.

$ btrfs filesystem df /media/sdb Data: total=1.81TB, used=1.00TB System, DUP: total=8.00MB, used=204.00KB System: total=4.00MB, used=0.00 Metadata, DUP: total=2.00GB, used=1.50GB Metadata: total=8.00MB, used=0.00
Файл.система Iнодов IИспользовано IСвободно IИспользовано% Cмонтировано в /dev/sdb1 0 0 0 - /media/sdb 

ты точно с квотами в btrfs не баловался?

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

erzent ☆☆ ( 21.07.14 19:39:38 MSK )
Последнее исправление: erzent 21.07.14 19:40:18 MSK (всего исправлений: 1)

Точно. Форматнул GParted`ом. На сервере Ubuntu 12.04.4 LTS, Btrfs v0.19. В качестве граф-оболочки fvwm/lxde. Сейчас отправил выполнять «btrfsck —repair /dev/sdb1». Надеюсь, поможет.

$ sudo btrfsck --repair /dev/sdb1 found 1101424578560 bytes used err is 0 total csum bytes: 1065362740 total tree bytes: 1610305536 total fs tree bytes: 106020864 btree space waste bytes: 363279156 file data blocks allocated: 50678114824192 referenced 1099008647168 

zzdnx ★★ ( 21.07.14 20:08:35 MSK )
Последнее исправление: zzdnx 21.07.14 20:18:05 MSK (всего исправлений: 1)

Да не, я к тому, что начинают делать свои велосипеды, вместо совместимости с штатными утилитами.

у тебя версия btrfs 2008 года, а сейчас на дворе 2014, хочешь btrfs рабочую, ставь ядро старше 3.14.1

Linux server 3.8.0-36-generic x86_64 GNU/Linux

Ковырять сервер ради рабочей БТР смысла особого не вижу. Том монтировался и демонтировался секунд по 10-15. После того как переустановил правадоступа на одного пользователя это ушло. Потом написал небольшой код и посмотрел.

a () < rm -r galery/ ;sleep 5; cp -r OLD/galery ./ 2>>/dev/null ; sleep 5 ; du ./galery -c | grep итого; > while true ; do a ; done 18856 итого 18508 итого 16832 итого 18856 итого 18508 итого 18508 итого 18856 итого 18036 итого 18508 итого 18508 итого 18036 итого 18508 итого 18508 итого 18856 итого 16528 итого 18856 итого 18508 итого 18856 итого 18856 итого 18508 итого 18508 итого 
rm: невозможно удалить «galery/»: Нет такого файла или каталога 35656 итого 37340 итого 25832 итого du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого rm: невозможно удалить «galery/»: Нет такого файла или каталога du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого rm: невозможно удалить «galery/»: Нет такого файла или каталога du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого rm: невозможно удалить «galery/»: Нет такого файла или каталога 25580 итого du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого rm: невозможно удалить «galery/»: Нет такого файла или каталога du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого rm: невозможно удалить «galery/»: Нет такого файла или каталога du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого rm: невозможно удалить «galery/»: Нет такого файла или каталога ^C
rm: невозможно удалить «galery/»: Нет такого файла или каталога 24592 итого du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого rm: невозможно удалить «galery/»: Нет такого файла или каталога du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого rm: невозможно удалить «galery/»: Нет такого файла или каталога 26452 итого du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого rm: невозможно удалить «galery/»: Нет такого файла или каталога du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого rm: невозможно удалить «galery/»: Нет такого файла или каталога 24592 итого du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого rm: невозможно удалить «galery/»: Нет такого файла или каталога 26236 итого du: невозможно получить доступ к «./galery»: Нет такого файла или каталога 0 итого ^C

Источник

Читайте также:  Linux rdp не переключается

compizomania

Любой, даже начинающий линуксятник, как правило знаком со многими штатными, консольными утилитами Linux.
Не исключение и консольная утлилита — cp, которая позволяет в консоли/терминале производить копирование файлов и папок из одной директории/каталога в любую другую.
В этой статье мы с Вами научимся научить её делать то, что она изначально делать просто не умеет, а именно создавать новые директории/каталоги/папки/файлы при рекурсивном копировании.
И в результате мы с вами получим удобный инструмент — 2 (два) в одном — утилиты mkdir и cp, что весьма улучшит функционал утилиты cp.

Т.к. утилита cp консольная, то для работы с ней нам понадобится, естественно Терминал (Ctrl+Alt+T).

Открываем его и, для эксперимента, давайте попробуем выполнить копирование содержимого какой-либо папки или самой папки, например содержимое папки: applications
из .local/share/Домашняя папка (/home)
Полный путь:
.local/share/applications/ или ~/.local/share/applications/
например в каталог Документы и пропишем при копировании создание в нём новой папки Проба и подпапки в ней 14 , куда будет скопировано содержимое папки applications и посмотрим, что у нас в результате получится.

Вводим в Терминале (Ctrl+Alt+T) следующий код и жмём на Ентер на клавиатуре:
cp -R .local/share/applications/* Документы/Проба/14
или
cp -R ~/.local/share/applications/* ~/Документы/Проба/14

показывающую и кричащую нам, как раз о том, что утилита cp не умеет создавать при копировании новые директории/каталоги/папки, а значит у нас нет другого выхода, как сначала воспользоваться консольной утилитой по созданию новых директорий/каталогов/папок:
mkdir
— или в Графическом режиме (GUI) в вашем файловом менеджере (ФМ) и только после этого копировать содержимое папки applications в заранее созданные в каталоге Документы новые папку Проба и подпапку в ней 14 !

Читайте также:  Масштаб интерфейса linux mint

Не очень удобно, правда ведь?!
Что же делать?!
Как же всё таки нам сделать, чтобы она (утилита cp) всё же могла выполнить нашу задачу?

На самом деле, всё очень просто!
Нам всего лишь надо добавить в файл .bashrc (можно в самый его конец, с новой строки) в Домашней папке (/home) следующий код/функцию, обязательно сохраняя отступы, как в нём:

mkcp() test -d "$ " || mkdir -p "$ " cp "$@" > 

Но такай код/функция будет работать только при копировании в пределах Домашнего каталога (/home).
Поэтому, если вы планируете копировать что-либо с созданием каталогов/папок не только в пределах Домашнего каталога (/home), а и в системной директории / (например в /opt/ ), то тогда уже нужен другой код/функция:

mkcp() test -d "$ " || sudo mkdir -p "$ " sudo cp "$@" > 

Но при её выполнении нужно уже будет вводить свой пароль Пользователя.

Cделать это можно и в Терминале (Ctrl+Alt+T) с помощью того же консольного редактора nano, выполнив команду:
(напоминаю, после внесения изменений в файл в редакторе nano, для сохранения изменений жмёте на клавиатуре на Ctrl+O (буква O)+Enter и на Ctrl+X для выхода в консоль/терминал)
nano .bashrc
или
nano ~/.bashrc

и активировать этот файл .bashrc в данной сессии консоли/терминала командой:
(если этого не сделать, то введёный код/функция работать не будет, а только после закрытия консоли/терминала и заново её/его запуска, что в данном случае не очень удобно)
. .bashrc
или
. ~/.bashrc

Ну, и, для ленивых, сделать всё это одной командой в Терминале (Ctrl+Alt+T):
echo -e ‘mkcp() » || mkdir -p «$»\n cp «$@»\n>’ >> .bashrc; . .bashrc
или
echo -e ‘mkcp() » || mkdir -p «$»\n cp «$@»\n>’ >> ~/.bashrc; . ~/.bashrc

Если с созданием каталогов/папок в системной директории / (например в /opt/ ), то:
echo -e ‘mkcp() » || sudo mkdir -p «$»\n sudo cp «$@»\n>’ >> .bashrc; . .bashrc
или
echo -e ‘mkcp() » || sudo mkdir -p «$»\n sudo cp «$@»\n>’ >> ~/.bashrc; . ~/.bashrc

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

А написали мы с вами фактически «новую» утилиту!
И «назвали» мы её — mkcp.
Вернее, мы с вами объединили вместе 2 (две) утилиты — mkdir и cp.

Ну, и теперь давайте снова выполним в Терминале (Ctrl+Alt+T) копирование, но только вместо cp мы с вами в коде напишем — mkcp, т.е. то, что мы с вами «создали», в результате чего, мы с вами видим, что всё прошло успешно, без каких-либо ошибок:
mkcp -R .local/share/applications/* Документы/Проба/14
или
mkcp -R ~/.local/share/applications/* ~/Документы/Проба/14

Чтобы убедиться, что всё прошло на УРА, давайте проверим, действительно ли всё отработало и в каталоге Документы создались новые папка Проба и подпапка в ней 14 поочерди командами ls:
ls Документы
ls Документы/Проба
ls Документы/Проба/14
в результате чего мы получим выводы, подтверждающих, что всё создалось и всё скопировалось:

То же самое мы видим и в Графическом режиме (GUI) в вашем файловом менеджере (ФМ):

Для сравнения, чтобы убедиться, что мы скопировали в созданные нами при копировании папки именно то, что мы хотели, сделаем вывод ls .local/share/applications/ командой в Терминале (Ctrl+Alt+T):
ls .local/share/applications
или
ls ~/.local/share/applications

где видим, что все файлы и папки из это директории соответствуют всем файлам и папкам в созданной нами при копировании папке 14 — полный путь: Документы/Проба/14

Те же папки и файлы и в Графическом режиме (GUI) в нашем файловом менеджере (ФМ):

А значит, мы с вами всё сделали правильно и всё работает должным образом!

Всем приятного юзанья и всяческих благ!

Источник

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