У меня когда-то была похожая проблема. Вы должны проверить файлfstab .
Если с вашим файлом fstabпроблем нет (все разделы и устройства настроены правильно) и вы по-прежнему получаете это сообщение об ошибке, возможно, что-то пошло не так с разметкой вашего диска ( Например, неправильная файловая система, по умолчанию для Linux используется ext4)
fstab должен выглядеть примерно так:
#
/dev/sdaX / ext4 defaults 0 1
/dev/sdaY /mount/path ext4 defaults 0 2
Где sdaX — это раздел, на котором установлен ваш Linux. Он должен быть смонтирован в корневом каталоге.
РЕДАКТИРОВАТЬ
Я не знаю, что означают эти UUID, поэтому попробуйте fsck -f
без указания каких-либо файловых систем, он должен проверить их все.
С помощью zsh
вы можете сделать что-то вроде
# get current date (YYMM) in a variable
crd=$(date "+%y%m")
# use a function to extract the 13 chars that make up the timestamp
dtts() REPLY=${${REPLY%%.*}: -13}
# sort file names by the timestamp in descending order, exclude the ones with the
# same YYMM as the current date and set the remaining file names as arguments
set -- *(.O+dtts^e_'[[ "${${REPLY%%.*}: -13:4}" == "$crd" ]]'_)
# remove the first item from the list (i.e. the last one before current month)
shift
# print the remaining file names
print -rl -- "$@"
Здесь используется расширение параметров и квалификаторы глобуса :
он сначала выбирает обычные файлы (.) В порядке убывания ( O
) по метке времени с помощью функции dtts
, затем инвертированной e
] string ^ e _ '[["$ {$ {REPLY %%. *}: -13: 4}" == "$ crd"]]' _
отменяет выбор файлов, если метка времени совпадает с текущим годом и месяц (т.е. если выражение внутри кавычек вернет истину); shift
затем удаляет первый элемент из списка (поскольку имена были отсортированы в порядке убывания, который будет последней меткой времени до текущего месяца)
Заменить print -rl
на rm
, если результат вас устраивает.
решение bash будет:
#!/bin/bash
keep=$(date '+%y%m')
rm `find. -name "name*" -and -not -name "name$keep*" | sort | head -n-1`
Однако я бы не стал использовать в таких случаях сценарий чистой оболочки, потому что код может очень быстро (усложниться и, следовательно, стать менее удобным для сопровождения ).
вместо этого вы можете использовать perl (или python ):
#!/usr/bin/env perl
use strict;
use warnings;
use POSIX qw(strftime);
# collect the names of all files older than current month.
# we assume that there are no files from future.
my $keep_date = strftime("%y%m", localtime);
my @files = sort grep {!/^name$keep_date/} glob "*.gz";
# the newest file from the collected files shall not be deleted
pop @files;
# delete all collected files
map {unlink} @files;
или напрямую из командной строки:
perl -We 'use POSIX qw(strftime); my $keep_date = strftime("%y%m", localtime); my @files = sort grep {!/^name$keep/} glob "*.gz"; pop @files; map {unlink} @files;'