Вопрос или проблема
Я пытаюсь прочитать информацию о серийном номере процессора с сервера, на котором установлена FreeBSD.
Я попробовал следующее, но без результата:
- sysctl
- dmesg
- cpucontrol
Эти утилиты не существуют на системе:
- Dmidecode
- Cpuinfo
- cpuid
- директория /proc
Я не могу установить какое-либо программное обеспечение на сервер.
Есть идеи, как это решить?
Спасибо!
Пакет “cpuid” существует на FreeBSD, но не входит в базовую систему.
Пример вывода:
root@freeBSD > cpuid
eax in eax ebx ecx edx
00000000 00000005 756e6547 6c65746e 49656e69
00000001 000106e5 01040800 00000201 178bfbff
00000002 55035a01 00f0b2e4 00000000 09ca212c
00000003 00000000 00000000 00000000 00000000
00000004 0c000021 01c0003f 0000003f 00000000
00000005 00000000 00000000 00000000 00000000
80000000 80000008 00000000 00000000 00000000
80000001 00000000 00000000 00000001 28100800
80000002 65746e49 2952286c 726f4320 4d542865
80000003 37692029 55504320 20202020 20202020
80000004 30363820 20402020 30382e32 007a4847
80000005 00000000 00000000 00000000 00000000
80000006 00000000 00000000 01006040 00000000
80000007 00000000 00000000 00000000 00000000
80000008 00003024 00000000 00000000 00000000
Идентификатор производителя: "GenuineIntel"; уровень CPUID 5
Специфичные функции Intel:
Версия 000106e5:
Тип 0 - Оригинальный OEM
Семейство 6 - Pentium Pro
Модель 30 - процессор Intel Core i7 или Xeon, 45 нм
Шаг 5
Резерв 0
Расширенная строка бренда: "Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz"
Размер кэш-линии инструкции CLFLUSH: 8
Начальный идентификатор APIC: 1
Потоки гипертехнологии: 4
Флаги функций: 178bfbff:
FPU Устройство с плавающей запятой
VME Усовершенствования виртуального режима 8086
DE Расширения отладки
PSE Увеличения размера страницы
TSC Счетчик временных меток
MSR Регистры специфичные для модели
PAE Расширение физического адреса
MCE Исключение проверки машины
CX8 Инструкция COMPXCHG8B
APIC На чипе присутствует и включен продвинутый программируемый контроллер прерываний
SEP Быстрый системный вызов
MTRR Регистры диапазона типов памяти
PGE Глобальный флаг PTE
MCA Архитектура проверки машины
CMOV Условные перемещения и инструкции сравнения
FGPAT Таблица атрибутов страницы
PSE-36 Увеличение размера страницы 36 бит
CLFSH Инструкция CFLUSH
MMX Набор инструкций MMX
FXSR Быстрая FP/MMX потоковая SIMD расширения сохранения/восстановления
SSE Набор инструкций потоковых SIMD расширений
SSE2 Расширения SSE2
HT Гипертехнология
Флаги функций установленного набора 2: 00000201:
SSE3 Расширения SSE3
SSSE3 Дополнительное потоковое SIMD расширение 3
Расширенные флаги функций: 28100800:
SYSCALL Инструкции SYSCALL/SYSRET
XD-bit Бит отключения выполнения
RDTSCP RDTSCP и IA32_TSC_AUX доступны
EM64T Расширенная память Intel 64 технологии
Расширенные флаги функций установленного набора 2: 00000001:
LAHF LAHF/SAHF доступны в режиме IA-32e
Информация о TLB и кэше:
5a: TLB данных: 2MB или 4MB страницы, 4-кратная ассоциативность, 32 записи
03: TLB данных: 4KB страницы, 4-кратная ассоциативность, 64 записи
55: TLB команд: 2MB или 4MB страницы, полностью ассоциативный, 7 записей
e4: Кэш третьего уровня: 8MB, 16-кратная ассоциативность, 64 байта размер линии
b2: TLB команд: 4-KB страницы, 4-кратная ассоциативность, 64 записи
f0: 64 байта предвыборки
2c: Первичный кэш данных: 32-KB, 8-кратная ассоциативность, 64 байта размер линии
21: L2 (MLC) 256-KB, 8-кратная ассоциативность, 64 байта размер линии
ca: Общий TLB второго уровня: 4-KB страницы, 4-кратная ассоциативность, 512 записей
09: Первичный кэш команд: 32KB, 4-кратная ассоциативность, 64 байта размер линии
Серийный номер процессора: 0001-06E5-0000-0000-0000-0000
Я думаю, что значение, которое вы ищете, это “Серийный номер процессора”. Поэтому простой cpuid | grep "Серийный номер процессора"
справится с задачей.
Как вы сказали, вы не можете установить что-то на своем сервере, вы все еще можете:
- найти тихое место, например
/tmp
(если хотите оставить след/мусор небольшой), -
получить предварительно скомпилированный пакет:
fetch ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages/misc/cpuid-3.3_6.tbz
(откорректируйте URL в зависимости от архитектуры вашего сервера – см.
uname -a
для получения дополнительной информации) -
извлечь бинарный файл “cpuid” из него:
tar -jxvf cpuid-3.3_6.tbz bin/cpuid`
-
и выполнить его локально:
./bin/cpuid
Я пробовал […] cpucontrol
Что ж, вы не потрудились прочитать его справочную страницу. Всегда была ссылка на cpuctl(4)
.
- Убедитесь, что
cpuctl
модуль ядра загруженkldload cpuctl
и будет загружен после перезагрузки
cat >> /boot/loader.conf < 'EOT' cpuctl_load="YES" EOT
cpuctl
не является частью сборкиGENERIC
. Еслиcpuctl
не загружен или встроен, нет устройств/dev/cpuctl*
. Поэтомуcpucontrol
не может работать. - Определите номер уровня для запроса серийного номера процессора. Для процессоров x86 это
0x03
cpucontrol -i 3 /dev/cpuctl0
Вы можете заметить, что он показывает все нули. На самом деле серийный номер процессора был отменен в пользу конфиденциальности.
Так что вы хотите достигнуть, получив PSN? Если вам просто нужен идентификатор, который имеет большую вероятность быть уникальным в вашей сети, но не важен конкретный процессор, вы можете использовать:
/etc/hostid
(заполняется/etc/rc.d/hostid
)sysctl kern.hostuuid
kenv smbios.system.uuid
“Серийный номер процессора”, сообщаемый инструментом cpuid
, представленным в ответе Ouki, на самом деле представляет собой просто информацию о версии процессора с некоторыми лишними нулями. Вы можете получить те же данные (без дефисов) с cpucontrol
:
cpucontrol -i 1 /dev/cpuctl0 | {
read -r line
# Удалите префикс “cpuid level 0x1: ”.
printf "${line#*: }" | {
read -r EAX EBX ECX EDX dummy
[ "${dummy}" ] && { printf 'Неожиданный формат вывода.\n.' ; exit 1 ; }
# Серийный номер `cpuid.0x03` имел 96 значимых бит = 24 шестнадцатеричных знака.
printf '%08x%016x\n' "${EAX:?Неожиданный формат вывода.}" '0'
}
}
Если вы не хотите мириться с cpucontrol
, информация обычно также сообщается при загрузке, как уже указывал arved.
grep -F 'Id=' /var/run/dmesg.boot # не гарантируется, что покажет строку
Ответ или решение
Чтобы извлечь серийный номер процессора на сервере с операционной системой FreeBSD, необходимо учитывать ограничения, которые вы упомянули: недоступность ряда утилит и невозможность установки программного обеспечения. Давайте подробно разберем возможные подходы к решению вашей задачи.
Использование утилиты cpuid
Хотя утилита cpuid
не входит в базовую сборку FreeBSD, её можно загрузить как предварительно скомпилированный пакет. Выполните следующие шаги:
-
Скачивание пакета:
Используйте командуfetch
для получения необходимого пакета. В зависимости от архитектуры вашего сервера команда может выглядеть так:fetch ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages/misc/cpuid-3.3_6.tbz
-
Извлечение утилиты:
После скачивания распакуйте пакет с помощью команды:tar -jxvf cpuid-3.3_6.tbz bin/cpuid
-
Запуск утилиты:
Сейчас вы можете запустить утилитуcpuid
:./bin/cpuid
Таким образом, вы получите информацию о процессоре, включая его серийный номер. Смотрите строку, содержащую "Processor serial"
, для получения нужного значения.
Альтернативы при отсутствии cpuid
Если по каким-то причинам вы не можете использовать вышеупомянутый метод, у вас есть другие варианты:
-
Загрузка и установка модуля cpuctl:
Для этого выполните следующую команду для загрузки модуля:kldload cpuctl
Чтобы модуль загружался после перезагрузки, добавьте в файл
/boot/loader.conf
строку:echo 'cpuctl_load="YES"' >> /boot/loader.conf
-
Использование cpucontrol:
После загрузки модуляcpuctl
, можно проверять серийный номер с помощьюcpucontrol
:cpucontrol -i 3 /dev/cpuctl0
Обратите внимание, что в современных процессорах серийные номера часто не доступны по соображениям конфиденциальности и могут возвращать нулевые значения.
Альтернативные идентификаторы
Если вам нужно просто уникально идентифицировать сервер без использования серийного номера процессора, вот несколько альтернатив:
/etc/hostid
: Это файл, который содержит уникальный идентификатор системы.- Команда
sysctl
для получения UUID системы:sysctl kern.hostuuid
- Команда
kenv
, если вы используете поддержку ACPI:kenv smbios.system.uuid
Эти методы предоставят вам уникальный идентификатор системы, который может быть использован для ваших целей.
Заключение
Хотя чтение серийного номера процессора на FreeBSD может представлять некоторую сложность, особенно с ограничениями на установку пакетов, вышеприведенные методы позволяют вам получить необходимую информацию. Выбор конкретного способа зависит от вашей ситуации и доступных инструментов. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за подробностями или уточнениями.