Вход в систему, когда корневая файловая система полна

Я пользуюсь библиотекой ConfigObj Python для этого. Если Вы делаете это, это действительно требует записи Python для взаимодействия через интерфейс с файлами конфигурации. У меня обычно есть a default_conf файл, который имеет значения по умолчанию, и я могу выборочно переопределить эти настройки с некоторым другим файлом, сказать user_conf

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

conf = get_conf()
ip = conf["ip"]

В Вашем случае я предполагаю, что файл сервера является тем, который переопределяет, хотя чаще это - пользовательский файл, который переопределяет системный файл. Это - конечно, пользовательская конвенция в Системах типов Unix.

Для записи ConfigObj возражают для регистрации, в первом приближении Вы делаете (если config Ваш объект как в сценарии ниже),

config.filename = filename
config.write()

Таким образом, Вы могли изменить функцию ниже для записи в файл вместо того, чтобы возвратить объект конфигурации, если Вы хотите. Посмотрите Запись Файла конфигурации для немного большего количества детали.

def get_conf():
    import configobj, validate, sys
    try:
        config = configobj.ConfigObj('default_conf', configspec='conf.validate', raise_errors=True)
    except configobj.ConfigObjError:
        print "ERROR FOR CONFIG FILE 'default_conf':"
        raise
    try:
        user = configobj.ConfigObj('user_conf', configspec='conf.validate', raise_errors=True)
    except configobj.ConfigObjError:
        print "ERROR FOR CONFIG FILE 'user_conf':"
        raise
    config.merge(user)

    #This is config file validation
    fdict = {'check_list_of_list_of_integers': list_of_list_of_integers}
    validator = validate.Validator(fdict)

    results = config.validate(validator, preserve_errors=True)
    if results != True:
        for entry in configobj.flatten_errors(config, results):
            # each entry is a tuple
            section_list, key, error = entry
            if key is not None:
                section_list.append(key)
            else:
                section_list.append('[missing section]')
            section_string = ', '.join(section_list)
            if error == False:
                error = 'Missing value or section.'
            print section_string, ' = ', error

        sys.exit(1)

    return config

ОБНОВЛЕНИЕ 16-го декабря 2015: Что-то как YAML - вероятно, лучшее общее решение. Я рекомендую это вместо ConfigObj. С одной стороны, это более гибко.

3
23.12.2013, 14:03
1 ответ

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

Зарезервированное пространство для корня в файловой системе - почему?

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

  1. Переключитесь на VT (нажмите Ctrl + Высокий звук + F2, например), войдите в систему как корень оттуда и свободный некоторое пространство.
  2. Во время начальной загрузки решили однопользовательский режим получить корневую оболочку, которая также помогла бы Вам свободный некоторое пространство для Вашего регулярного входа в систему.

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

5
27.01.2020, 21:16
  • 1
    Таким образом, если это не было root или демон, работающий как суперпользователь, который заполнил файловую систему во-первых. В этом случае однопользовательская начальная загрузка (или при экстремальных обстоятельствах, спасательной начальной загрузке) может быть необходимой. –  Alexios 23.12.2013, 15:44
  • 2
    @Alexios Вы правы. Спасибо за указание на это. Добавит к ответу. –  Joseph R. 23.12.2013, 17:32
  • 3
    После того, как укушенный, дважды пугайтесь. У меня была эта точная ситуация на старых полях Solaris. И спасение их было очень раздражающим. системное администрирование ;) –  Alexios 23.12.2013, 17:49
  • 4
    @Alexios: приезжайте для забавы, останьтесь для военных историй :) –  Joseph R. 23.12.2013, 17:54

Теги

Похожие вопросы