
# 怎样使修改的静态主机名永久生效？
#### 问题描述
Linux弹性云服务器的静态主机名来源于创建弹性云服务器时，通过Cloud-init注入的用户自定义名称。虽然可以使用**hostname**命令更改Linux弹性云服务器的主机名，但如果重新启动弹性云服务器，它将自动还原为使用Cloud-init注入的用户自定义名称。
#### 修改弹性云服务器实例的主机名（修改hostname）
如果您希望修改后的主机名在弹性云服务器关机、重启后仍然生效，需要将其写入相应的Cloud-init配置文件中，使之永久生效。
假设修改后的主机名为"new_hostname"。
1. 修改配置文件"/etc/hostname"。
   1. 执行以下命令，编辑配置文件"/etc/hostname"。 **sudo vim /etc/hostname**
      
   
   2. 修改配置文件，将文件中的主机名替换为修改后的主机名（new_hostname）。
   
   3. 执行以下命令，保存并退出文件。 **:wq**
      
    
2. 修改配置文件"/etc/sysconfig/network"。
   1. 执行以下命令，编辑配置文件"/etc/sysconfig/network"。 **sudo vim /etc/sysconfig/network**
      
   
   2. 修改涉及"HOSTNAME"的参数值，将其设置为修改后的主机名（new_hostname）。 **HOSTNAME=*修改后的主机名***
      ![](https://support.huaweicloud.com/ecs_faq/public_sys-resources/note_3.0-zh-cn.png)
      如果配置文件中没有HOSTNAME，请手动补充并将参数值设置为修改后的主机名。
      示例：
      ```
      HOSTNAME=new_hostname
      ```
      
   
   3. 执行以下命令，保存并退出文件。 **:wq**
      
    
3. 修改配置文件"/etc/cloud/cloud.cfg"。
   1. 执行以下命令，编辑配置文件"/etc/cloud/cloud.cfg"。 **sudo vim /etc/cloud/cloud.cfg**
      
   
   2. 选择如下方法，修改配置文件。
      - 方法一：修改或添加"preserve_hostname"参数项。 如果文件"/etc/cloud/cloud.cfg"中已有参数项"preserve_hostname: false"，将其修改为"preserve_hostname: true"即可。如果文件"/etc/cloud/cloud.cfg"中没有该参数项，需在"cloud_init_modules"模块前，添加语句**preserve_hostname: true**。
        选择方法一，弹性云服务器关机、重启后，修改后的主机名（new_hostname）仍然生效。但是，如果使用该弹性云服务器制作私有镜像，并使用生成的镜像重新创建弹性云服务器，则新创建的弹性云服务器的主机名即为私有镜像使用的主机名（new_hostname），不能通过Cloud-init重新注入用户自定义名称。
        
      
      - 方法二（推荐）：删除或者注释语句**- update_hostname** 。
        选择方法二，弹性云服务器关机、重启后，修改后的主机名（new_hostname）仍然生效。但是，如果使用该弹性云服务器制作私有镜像，并使用生成的镜像重新创建弹性云服务器，用户可以通过Cloud-init注入用户自定义名称（如new_new_hostname），并通过本节内容长久有效地修改静态主机名。
        ![](https://support.huaweicloud.com/ecs_faq/public_sys-resources/note_3.0-zh-cn.png)
        部分操作系统版本的弹性云服务器在通过Cloud-init注入用户自定义名称后，可能出现使用**hostname** 命令获取的主机名带".novalocal"后缀的情况，详细内容，请参见[弹性云服务器的主机名带后缀novalocal，这正常吗？](https://support.huaweicloud.com/ecs_faq/ecs_faq_0604.html)。
        针对这种情况，您可以参考[配置Cloud-Init工具](https://support.huaweicloud.com/usermanual-ims/zh-cn_topic_0030730603.html)，修改配置使得通过私有镜像创建的弹性云服务器的主机名不带".novalocal"后缀。
        
       
    

4. 执行以下命令，重启弹性云服务器。 **sudo reboot**
   
5. 执行以下命令，验证主机名的修改是否永久生效。 **sudo hostname**
   如果回显的内容是修改后的主机名（new_hostname），则表示主机名修改成功，永久生效。
   
 
#### 修改弹性云服务器实例的主机名与IP地址的映射（修改hosts）
如果您希望将修改后的主机名作为首选的主机名、本地域和本地主机，在修改完主机名后，还需要更新主机名与IP地址的映射并将配置写入相应的Cloud-init配置文件中，使之永久生效。
假设修改后的主机名为"new_hostname"。
1. 修改配置文件"/etc/hostname"。
   1. 执行以下命令，编辑配置文件"/etc/hostname"。 **sudo vim /etc/hostname**
      
   
   2. 修改配置文件，将文件中的主机名替换为修改后的主机名（new_hostname）。
   
   3. 执行以下命令，保存并退出文件。 **:wq**
      
    
2. 修改配置文件"/etc/sysconfig/network"。
   1. 执行以下命令，编辑配置文件"/etc/sysconfig/network"。 **sudo vim /etc/sysconfig/network**
      
   
   2. 修改涉及"HOSTNAME"的参数值，将其设置为修改后的主机名（new_hostname）。 **HOSTNAME=*修改后的主机名***
      ![](https://support.huaweicloud.com/ecs_faq/public_sys-resources/note_3.0-zh-cn.png)
      如果配置文件中没有HOSTNAME，请手动补充并将参数值设置为修改后的主机名。
      示例：
      ```
      HOSTNAME=new_hostname
      ```
      
   
   3. 执行以下命令，保存并退出文件。 **:wq**
      
    
3. 修改配置文件"/etc/cloud/cloud.cfg"。
   1. 执行以下命令，编辑配置文件"/etc/cloud/cloud.cfg"。 **sudo vim /etc/cloud/cloud.cfg**
      
   
   2. 选择如下方法，修改配置文件。
      - 方法一：修改或添加"preserve_hostname"参数项。 如果文件"/etc/cloud/cloud.cfg"中已有参数项"preserve_hostname: false"，将其修改为"preserve_hostname: true"即可。如果文件"/etc/cloud/cloud.cfg"中没有该参数项，需在"cloud_init_modules"模块前，添加语句**preserve_hostname: true**。
        选择方法一，弹性云服务器关机、重启后，修改后的主机名（new_hostname）仍然生效。但是，如果使用该弹性云服务器制作私有镜像，并使用生成的镜像重新创建弹性云服务器，则新创建的弹性云服务器的主机名即为私有镜像使用的主机名（new_hostname），不能通过Cloud-init重新注入用户自定义名称。
        
      
      - 方法二（推荐）：删除或者注释语句**- update_hostname** 。
        选择方法二，弹性云服务器关机、重启后，修改后的主机名（new_hostname）仍然生效。但是，如果使用该弹性云服务器制作私有镜像，并使用生成的镜像重新创建弹性云服务器，用户可以通过Cloud-init注入用户自定义名称（如new_new_hostname），并通过本节内容长久有效地修改静态主机名。
        
       
    

4. 将"/etc/hosts"文件中hostname和ip的映射更新为以 127.0.0.1开头的条目，将"new_hostname"作为您首选的主机名、本地域和本地主机。
   1. 执行以下命令，编辑"/etc/hosts"文件。 **sudo vim /etc/hosts**
      
   
   2. 修改127.0.0.1开头的条目，将localhost、localhost.localdomain替换为"new_hostname"。
      ```
      ::1     localhost       localhost.localdomain   localhost6      localhost6.localdomain6
      127.0.0.1       localhost       localhost.localdomain   localhost4      localhost4.localdomain4
      127.0.0.1       new_hostname    new_hostname
      ```
      
   
   3. 执行以下命令，保存并退出文件。 **:wq**
      
    
5. 修改配置文件"/etc/cloud/cloud.cfg"。
   1. 执行以下命令，编辑配置文件"/etc/cloud/cloud.cfg"。 **sudo vim /etc/cloud/cloud.cfg**
      
   
   2. 将"manage_etc_hosts"参数项配置为"manage_etc_hosts: false"。
      ```
      manage_etc_hosts: false
      ```
      
   
   3. 执行以下命令，保存并退出文件。 **:wq**
      
    

6. 执行以下命令，重启弹性云服务器。 **sudo reboot**
   
7. 执行以下命令，验证主机名和hosts的修改是否永久生效。 **sudo hostname**
   **sudo cat /etc/hosts**
   如果回显的内容是修改后的主机名（new_hostname）以及hosts，则表示修改成功，永久生效。
   
 
